Dataframe pct_change (), лучший способ игнорировать или избегать TypeError для столбцов - PullRequest
0 голосов
/ 21 февраля 2020

Учитывая код:

import pandas as pd
import numpy as np
df_ = pd.DataFrame(np.array([[1.79, 1, 0, 0, 0, pd.Timestamp('2018-01-01 00:00:07'), 0.0,
        1.3075932699341621, 0.14, 0.20999999999999996, 2.58],
       [1.83, 1, 0, 0, 0, pd.Timestamp('2018-01-01 00:00:07'), 1.05,
        1.3075932699341621, 0.14, 0.20999999999999996, 2.58],
       [1.83, 1, 0, 0, 0, pd.Timestamp('2018-01-01 00:00:07'),
        2.0833333333333335, 1.3075932699341621, 0.14,
        0.20999999999999996, 2.58],
       [1.85, 1, 0, 0, 0, pd.Timestamp('2018-01-01 00:00:07'), 3.1,
        1.3075932699341621, 0.14, 0.20999999999999996, 2.58],
       [1.85, 1, 0, 0, 0, pd.Timestamp('2018-01-01 00:00:07'),
        4.133333333333334, 1.3075932699341621, 0.14, 0.20999999999999996,
        2.58]], dtype=object))

df_.pct_change()

В последней строке появляется ошибка:

Ошибка типа: невозможно выполнить truediv с этим типом индекса: DatetimeIndex

  • При чтении ошибки возникает проблема со столбцом метки времени, с ним невозможно работать.
  • Нужно ли перетаскивать столбец даты в выполнить функцию? Имея несколько столбцов datetime, какой быстрый способ выполнить функцию pct_change(), игнорируя эти datetime (или любой не принятый тип dtype)?

1 Ответ

1 голос
/ 21 февраля 2020

Сначала при необходимости преобразуйте столбцы в числа с плавающей точкой, а затем выделите только числа c столбцы по DataFrame.select_dtypes:

def f(x):
    try:
        return x.astype(float)
    except:
        return x

df_ = df_.apply(f)

print (df_.select_dtypes(np.number).pct_change())
         0    1   2   3   4         6    7    8    9    10
0       NaN  NaN NaN NaN NaN       NaN  NaN  NaN  NaN  NaN
1  0.022346  0.0 NaN NaN NaN       inf  0.0  0.0  0.0  0.0
2  0.000000  0.0 NaN NaN NaN  0.984127  0.0  0.0  0.0  0.0
3  0.010929  0.0 NaN NaN NaN  0.488000  0.0  0.0  0.0  0.0
4  0.000000  0.0 NaN NaN NaN  0.333333  0.0  0.0  0.0  0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...