首页 > 解决方案 > 熊猫数据框评估功能错误

问题描述

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

标签: pythonpandaseval

解决方案


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

建议即使它与(假定的)数字数据一起使用,它也会(G * H)返回一个dtype。object

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

推荐阅读