Почему метод pandas join выдает ошибку? - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь объединить два фрейма данных (main_df и df).

print(main_df.head())
            NSA Value   SA Value
Date                            
1975-01-31  34.531020  34.725199
1975-02-28  34.996924  35.157220
1975-03-31  35.476331  35.517737
1975-04-30  35.990021  35.874357
1975-05-31  36.581159  36.283538

print(df.head())
            NSA Value   SA Value
Date                            
1975-01-31  35.759771  35.814004
1975-02-28  35.988479  36.049432
1975-03-31  36.246270  36.255031
1975-04-30  36.543662  36.493011
1975-05-31  36.784311  36.661750

main_df = main_df.join(df)

возвращает следующую ошибку:

Traceback (most recent call last):
  File "C:/Users/mbsta/PycharmProjects/untitled2/tester2.py", line 181, in <module>
    main_df = main_df.join(df)
  File "C:\Users\mbsta\Anaconda3\envs\untitled2\lib\site-packages\pandas\core\frame.py", line 7209, in join
    other, on=on, how=how, lsuffix=lsuffix, rsuffix=rsuffix, sort=sort
  File "C:\Users\mbsta\Anaconda3\envs\untitled2\lib\site-packages\pandas\core\frame.py", line 7232, in _join_compat
    sort=sort,
  File "C:\Users\mbsta\Anaconda3\envs\untitled2\lib\site-packages\pandas\core\reshape\merge.py", line 88, in merge
    return op.get_result()
  File "C:\Users\mbsta\Anaconda3\envs\untitled2\lib\site-packages\pandas\core\reshape\merge.py", line 649, in get_result
    ldata.items, lsuf, rdata.items, rsuf
  File "C:\Users\mbsta\Anaconda3\envs\untitled2\lib\site-packages\pandas\core\reshape\merge.py", line 2026, in _items_overlap_with_suffix
    "{rename}".format(rename=to_rename)
ValueError: columns overlap but no suffix specified: Index(['NSA Value', 'SA Value'], dtype='object')

Я все еще получаю сообщение об ошибке при попытке присоединиться после явного указание индекса

main_df = main_df.set_index('Date').join(df.set_index('Date'))

Выдает следующую ошибку:

Traceback (most recent call last):
  File "C:/Users/mbsta/PycharmProjects/untitled2/tester2.py", line 180, in <module>
    main_df = main_df.set_index('Date').join(df.set_index('Date'))
  File "C:\Users\mbsta\Anaconda3\envs\untitled2\lib\site-packages\pandas\core\frame.py", line 4303, in set_index
    raise KeyError(f"None of {missing} are in the columns")
KeyError: "None of ['Date'] are in the columns"

Я пытаюсь понять, как работает соединение, и не могу понять, почему он не присоединяется к индексу (Дата). Приветствуется любая ясность!

1 Ответ

0 голосов
/ 08 мая 2020

, если вы хотите добавить df в main_df, тогда ответ будет:

pd.concat([main_df, df])

для левого, правого или внутреннего соединения, вы можете использовать функцию pd.merge.

main_df.merge(df, on='date',how='left')

использование функции слияния не вызовет ошибки с одинаковыми именами столбцов. А лучше добавьте суффиксы сами. (Например, nsa_x, nsa_y)

...