Использование математического пакета (например, math.radians, math.tan) в столбце данных pandas - PullRequest
1 голос
/ 10 июля 2019

Пример df:

data = pd.DataFrame({'col1': ['1.55', '2.22', '2.22', '3.33'],
                  'col2': ['10', '15', '20', '30']})

Я хочу добавить новый столбец, используя некоторые математические функции на col1, например,

data['new'] = math.radians(data['col1'])

или

data['new'] = math.tan(data['col1'])

Это дает мне ошибку TypeError: cannot convert the series to <class 'float'>.Я преобразовал col1 в число с плавающей запятой, используя data['col1'] = data['col1'].astype(float64), поэтому я думаю, что ошибка должна быть в том, что data['new'] нельзя преобразовать в число с плавающей запятой.

Как я могу это исправить и использовать math для создания новых столбцов данных из старых?Объяснение того, почему math не очень хорошо играет с фреймом данных, было бы замечательно.

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Мы можем решить вашу проблему двумя способами, поскольку вы хотите передать скалярные значения в математические функции:

Метод 1, используя .astype и .apply:

data['new'] = data['col1'].astype(float).apply(math.radians)

   col1 col2       new
0  1.55   10  0.027053
1  2.22   15  0.038746
2  2.22   20  0.038746
3  3.33   30  0.058119

Метод2 (более быстрый метод) использует numpy функция

numpy принимает массивы в качестве входных данных

data['new2'] = np.tan(data['col1'].astype(float))

   col1 col2       new       new2
0  1.55   10  0.027053  48.078482
1  2.22   15  0.038746  -1.317612
2  2.22   20  0.038746  -1.317612
3  3.33   30  0.058119   0.190669
1 голос
/ 10 июля 2019

Во-первых, не заключайте элементы числового фрейма в кавычки.

data = pd.DataFrame({'col1': [1.55, 2.22, 2.22, 3.33],
                     'col2': [10, 15, 20, 30]})

Если вы получили именно такие данные, используйте функцию .astype.

data['col1'] = data['col1'].astype(float)

При выполнении операции с фреймом данных используйте apply().

data['new'] = data['col1'].apply(math.tan)

Конечно, все это можно сделать сразу, выполнив следующий код:

data['new'] = data['col1'].astype(float).apply(math.tan)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...