pandas - добавить новую строку с другим количеством столбцов - PullRequest
0 голосов
/ 09 октября 2019

У меня есть фрейм данных (df_original), который выглядит следующим образом:

Year | Thing1 | Thing2
2010 |  748   |   461
2011 |  246   |   493
2012 |  394   |   731

Мне нужно время от времени добавлять новые данные. Иногда я получаю данные с одинаковым количеством заголовков. Иногда я не буду. Я также не могу рассчитывать на то, что порядок заголовков одинаков.

Было бы хорошо добавить что-то вроде следующего:

Year | Thing1 | Thing2
2013 |  561   |  197

Однако вместо этого я мог бы получить это, что-то новое(df_new):

Year | Thing1 | Thing2 | Thing3
2013 |  561   |   197  |   369

Редактировать: я также мог бы получить этот кадр данных для добавления, будет ли учетная запись для заголовков в другом порядке?

Year | Thing1 | Thing3 | Thing2
2013 |  561   |   369  |   197

желаемый результат следующий:

Year | Thing1 | Thing2 | Thing3
2010 |  748   |  461   |   0
2011 |  246   |  493   |   0
2012 |  394   |  731   |   0
2013 |  561   |  197   |  369

Как мне достичь этого результата?

Я думал, pd.concat([df_original, df_new], join = 'outer', axis = 1, sort = False) может сделать это из-за этого поста , но он помещаетновые данные справа от исходных данных в df_original.

Ответы [ 2 ]

4 голосов
/ 09 октября 2019

Просто цепочка pd.concat с fillna(0):

pd.concat([df, df_new], sort=False).fillna(0)

Выход

   Year  Thing1  Thing2  Thing3
0  2010     748     461     0.0
1  2011     246     493     0.0
2  2012     394     731     0.0
0  2013     561     197   369.0

Если вы хотите сбросить индекс, используйте ignore_index:

pd.concat([df, df_new], sort=False, ignore_index=True).fillna(0)

выход

   Year  Thing1  Thing2  Thing3
0  2010     748     461     0.0
1  2011     246     493     0.0
2  2012     394     731     0.0
3  2013     561     197   369.0
0 голосов
/ 09 октября 2019

Конкат должен сделать свое дело. Но вы хотите, чтобы ось 0, которая используется по умолчанию, добавляла строки, а не столбцы, и игнорировала значения индекса.

df = pd.concat([df_original, df_new], sort=False, ignore_index=True)

Это будет вместо нолей вместо 0, как было указано выше. , но вы можете заменить их, если хотите.

...