我尝试使用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函数来评估更复杂的表达式。
答案 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