Ошибка функции оценки фрейма данных Pandas - PullRequest
0 голосов
/ 26 мая 2018

Я попытался сделать следующее, используя функцию 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 голосов
/ 26 мая 2018
TypeError: unsupported operand type(s) for /: 'object' and '<class
'int'>'

предполагает, что (G * H) возвращает тип object d, даже если он работает с (предположительно) числовыми данными.

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
...