首页 > 解决方案 > 在熊猫数据框中用 nan 替换任何字符串

问题描述

我是熊猫和数据框概念的新手。由于我的数据格式(excel-sheets,第一行是我的数据的名称,第二行是单位),在数据框中处理它有点棘手。任务是从现有列中计算新数据,例如df.['c'] = df['a']**2 + df.['b'] 我得到:TypeError: unsupported operand type(s) for ** or pow(): 'str' and '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'

有什么方法可以更快或更少打字吗?谢谢已经schamonn

标签: pandasdataframe

解决方案


让我们看看这篇文章中首先提到的错误。

类型错误:** 或 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'

如果您的所有 a 列都是数字表示,则对此的简单解决方案,然后使用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

推荐阅读