передача Series в pd.PeriodIndex в Pandas приводит к TypeError: Incorrect dtype - PullRequest
1 голос
/ 13 июля 2020

Я хочу преобразовать столбец DataFrame, содержащий строковые значения, такие как 2020Q2, в тип периода. Я попробовал следующее решение: { ссылка }, но получил следующую ошибку: TypeError: Incorrect dtype.

import pandas as pd
x=pd.DataFrame({'col':['2019Q1', '2019Q2', '2019Q3', '2019Q4', '2020Q1', '2020Q2']})
x['period']=pd.PeriodIndex(x.col, freq='Q-Oct')

Я тоже пробовал PeriodIndex для одной строки.

pd.PeriodIndex('2020Q2', freq='Q-Oct')

Это также дает ошибку: ValueError: Given date string not likely a datetime.

Конечно, я могу сначала преобразовать строку в datetime, а затем преобразовать ее в период.

x['period']=pd.to_datetime(x.col).dt.to_period(freq='Q-oct')

и

pd.to_datetime('2020Q2').to_period(freq='Q-oct')

Но, думаю, есть решение получше.

1 Ответ

2 голосов
/ 13 июля 2020

Это регрессионная ошибка, исправленная в версии 1.1. См. GH26109 .

Ваш метод является правильным, это регрессионная ошибка, появившаяся после 0.23, я полагаю (?), Из-за которой он не принимает периоды в серии . Попробуйте преобразовать его в список или массив:

pd.__version__
# '1.0.4'

pd.PeriodIndex(x['col'], freq='Q-Oct')
# TypeError: Incorrect dtype

# pd.PeriodIndex(x['col'].to_numpy(), freq='Q-Oct')  # also works
pd.PeriodIndex(x['col'].tolist(), freq='Q-Oct')
# PeriodIndex(['2019Q1', '2019Q2', '2019Q3', '2019Q4', '2020Q1', '2020Q2'], 
#             dtype='period[Q-OCT]', freq='Q-OCT')

Это работает на 1.1:

pd.__version__
# '1.1.0.dev0+2004.g8d10bfb6f'

pd.PeriodIndex(x['col'], freq='Q-Oct')
# PeriodIndex(['2019Q1', '2019Q2', '2019Q3', '2019Q4', '2020Q1', '2020Q2'], 
#             dtype='period[Q-OCT]', freq='Q-OCT')

Когда придет время, просто обновите!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...