Что не так с pandas .join ()? - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь объединить 2 набора данных pandas, но он заполняется NaN.

1st:

            _0   _1   _2   _3   _4   _5

2011-01-29  0    0    0    0    0    0
2011-01-30  0    0    0    0    0    0
2011-01-31  0    0    0    0    0    0
2011-02-01  0    0    0    0    0    0

2st:

              event_type_1      snap_CA      snap_TX      snap_WI

2011-01-29    NaN               0            0            0
2011-01-30    NaN               0            0            0
2011-01-31    NaN               0            0            0
2011-02-01    NaN               1            1            0

code что я использую:

right = main_df
left = calen_df.drop(['wm_yr_wk','weekday','wday',\
               'month','year','d','event_name_1',\
               'event_name_2','event_type_2'], axis=1)\
               .set_index('date')              
left.index.name = ''
left.join(right)

и результат:

              event_type_1      snap_CA         snap_TX        snap_WI   _0  _1  _2  _3  _4  _5

2011-01-29    NaN               0               0               0        NaN NaN NaN NaN NaN NaN
2011-01-30    NaN               0               0               0        NaN NaN NaN NaN NaN NaN
2011-01-31    NaN               0               0               0        NaN NaN NaN NaN NaN NaN
2011-02-01    NaN               1               1               0        NaN NaN NaN NaN NaN NaN

Я не могу выяснить, где проблема?!

1 Ответ

0 голосов
/ 28 апреля 2020

Очевидно, ваши фреймы данных (или хотя бы один) в некотором отношении отличаются от того, что вы представили в своем посте.

Начните с такого теста:

txt1 = '''    event_type_1      snap_CA      snap_TX      snap_WI
2011-01-29    NaN               0            0            0
2011-01-30    NaN               0            0            0
2011-01-31    NaN               0            0            0
2011-02-01    NaN               1            1            0'''
txt2 = '''    _0   _1   _2   _3   _4   _5
2011-01-29  0    0    0    0    0    0
2011-01-30  0    0    0    0    0    0
2011-01-31  0    0    0    0    0    0
2011-02-01  0    0    0    0    0    0'''
left_t  = pd.read_csv(io.StringIO(txt1), sep=r'\s+', index_col=0, parse_dates=True)
right_t = pd.read_csv(io.StringIO(txt2), sep=r'\s+', index_col=0, parse_dates=True)

Затем print(left_t). Результат должен быть:

            event_type_1  snap_CA  snap_TX  snap_WI
2011-01-29           NaN        0        0        0
2011-01-30           NaN        0        0        0
2011-01-31           NaN        0        0        0
2011-02-01           NaN        1        1        0

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

Та же распечатка для right_t должно дать:

            _0  _1  _2  _3  _4  _5
2011-01-29   0   0   0   0   0   0
2011-01-30   0   0   0   0   0   0
2011-01-31   0   0   0   0   0   0
2011-02-01   0   0   0   0   0   0

также без какой-либо пустой строки после имен столбцов.

И, наконец, запустить print(left_t.join(right_t)). Результат, который я получил:

            event_type_1  snap_CA  snap_TX  snap_WI  _0  _1  _2  _3  _4  _5
2011-01-29           NaN        0        0        0   0   0   0   0   0   0
2011-01-30           NaN        0        0        0   0   0   0   0   0   0
2011-01-31           NaN        0        0        0   0   0   0   0   0   0
2011-02-01           NaN        1        1        0   0   0   0   0   0   0

Чтобы продолжить расследование дела, запустите left_t.info() и right_t.info(), затем то же самое для обоих ваших исходных фреймов данных ( left и right ).

Сравните соответствующую информацию, ищите какие-либо различия, например: index должен иметь DatetimeIndex type .

Сравнить также left_t.columns с аналогичной распечаткой для вашего оригинала left DataFrame. Оба они должны иметь тип Index (не MultiIndex ).

На самом деле, дополнительная пустая строка после строки заголовка в ваших распечатках вызывает подозрения, что что-то не так с вашими исходными фреймами данных.

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