Pandas concat неправильно обрабатывает столбцы меток времени? - PullRequest
0 голосов
/ 06 декабря 2018

Когда два фрейма данных объединяются (используя concat), по умолчанию concat создает новый фрейм данных с объединением столбцов обоих, устанавливая значения всех отсутствующих столбцов в результате с помощью nan.Например ...

import pandas as pd
a = pd.DataFrame({'A':range(5), 'B':range(5)})
b = pd.DataFrame({'A':range(5)})
pd.concat([a , b], sort=False)

    A   B
0   0   0.0
1   1   1.0
...
3   3   NaN
4   4   NaN

Но если отсутствующий столбец в одном из кадров данных содержит временные метки, это приводит к разрывам ...

a = pd.DataFrame({'A':range(5), 'B':[pd.Timestamp.utcnow() for _ in range(5)]})
b = pd.DataFrame({'A':range(5)})
pd.concat([a , b], sort=False)

Выдает "AttributeError: объект NoneType" не имеетатрибут '_can_consolidate' ".

Python 3.6.5;Панды 0,23;Windows 7 x64

Это известная проблема?
Известны ли какие-нибудь обходные пути?

1 Ответ

0 голосов
/ 06 декабря 2018

Как поясняется в комментариях, это известная проблема (см. GH22796 ), исправленная для версии 0.24.Между тем, есть два возможных обходных пути.

Один - преобразовать в строку:

df = pd.concat([a.assign(B=a.B.astype(str)), b], sort=False) 
df['B'] = pd.to_datetime(df['B'], errors='coerce')
df

   A                          B
0  0 2018-12-06 18:21:35.363477
1  1 2018-12-06 18:21:35.363728
2  2 2018-12-06 18:21:35.363740
3  3 2018-12-06 18:21:35.363748
4  4 2018-12-06 18:21:35.363756
0  0                        NaT
1  1                        NaT
2  2                        NaT
3  3                        NaT
4  4                        NaT

Другой, как упоминалось @root, - инициализировать пустой столбец в b:

pd.concat([a, b.assign(B=pd.NaT)], sort=False)

   A                                 B
0  0  2018-12-06 18:21:35.363477+00:00
1  1  2018-12-06 18:21:35.363728+00:00
2  2  2018-12-06 18:21:35.363740+00:00
3  3  2018-12-06 18:21:35.363748+00:00
4  4  2018-12-06 18:21:35.363756+00:00
0  0                               NaT
1  1                               NaT
2  2                               NaT
3  3                               NaT
4  4                               NaT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...