我是熊猫和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'
有什么方法可以更快或更少地打字吗? 已经谢谢你了 沙门菜
答案 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
使用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