在熊猫数据框中使用nan替换任何字符串

时间:2018-12-06 13:27:21

标签: pandas dataframe

我是熊猫和dataframe-concept的新手。由于我的数据格式(excel工作表,第一行是我的数据名称,第二行是单位),因此在数据框中处理它有些棘手。 任务是从现有列中计算新数据,例如df.['c'] = df['a']**2 + df.['b'] 我得到:TypeError:**或pow()不支持的操作数类型:“ str”和“ int”

这确实有效,但是却使我的手和眼睛感到痛苦:

df.['c'] = df['a']
df.['c'] = df['a'].tail(len(df.['a']-1))**2 + df.['b'].tail(len(df.['b'])-1)
df.loc[0,'c'] = 'unit for c'

有什么方法可以更快或更少地打字吗? 已经谢谢你了 沙门菜

2 个答案:

答案 0 :(得分:1)

让我们看看本文中首先提到的错误。

  

TypeError:**或pow()不支持的操作数类型:“ str”和“ int”

此错误将继续存在,并尝试转换为幂,我们可以使用以下示例复制此错误:

df = pd.DataFrame({'a':['1','2','3'],'b':[4,5,6]})

df['a']**2

输出堆栈跟踪的最后一行:

TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

如果您的所有列都是数字表示形式,则可以采用一种简单的解决方案,然后使用pd.to_numeric

pd.to_numeric(df['a'])**2

输出:

0    1
1    4
2    9
Name: a, dtype: int64

a列中还包含非数字字符串吗?

使用errors = 'coerce'作为pd.to_numeric的参数

df = pd.DataFrame({'a':['a','1','2','3'],'b':[4,5,6,7]})

使用:

pd.to_numeric(df['a'], errors='coerce')**2

输出:

0    NaN
1    1.0
2    4.0
3    9.0
Name: a, dtype: float64

答案 1 :(得分:0)

这就是我读取数据的方式

Data = pd.read_excel(fileName, sheet_name = 'Messung')
In [154]: Data
Out[154]: 
   T1   T2 Messung                Datum
0  °C   °C       -                    -
1  12  100       1  2018-12-06 00:00:00
2  15  200       2  2018-12-06 00:00:00
3  20  120       3  2018-12-06 00:00:00
4  10  160       4  2018-12-06 00:00:00
5  12  160       5  2018-12-06 00:00:00