Pandas数据帧评估函数错误

时间:2018-05-26 10:06:30

标签: python pandas eval

我尝试使用pandas eval函数

进行以下操作
df.eval('I = (G * H) / 10000', inplace=True)

但是它给我发了以下错误

TypeError: unsupported operand type(s) for /: 'object' and '<class 'int'>'

但是当我这么做的时候,

df.eval('I = G * H', inplace=True)
一切顺利。 关于如何解决这个问题的任何想法?我想使用eval函数来评估更复杂的表达式。

1 个答案:

答案 0 :(得分:1)

TypeError: unsupported operand type(s) for /: 'object' and '<class
'int'>'

建议(G * H)返回object dtype,即使它与(据称)数字数据一起使用。

my_df.eval('I = (A * B)', inplace=True)
print(my_df.I)
>>> 0    8
>>> Name: I, dtype: object

检查您的列dtype,并可能转换为数字列。

import pandas as pd


columns = ['A', 'B', 'C']
my_df = pd.DataFrame(columns=columns)
my_df.loc[len(my_df)] = [2, 4, 5]
print(my_df.dtypes)

>>> A    object
>>> B    object
>>> C    object
>>> dtype: object

# Convert from object to int.
my_df[columns] = my_df[columns].astype(int)

my_df.eval('I = (A * B) / 10000', inplace=True)
print(my_df)
>>>    A  B  C       I
>>> 0  2  4  5  0.0008