#python-3.x #pandas
#python-3.x #pandas
Вопрос:
Я объединяю свои два фрейма данных ниже в двух полях.
successes = pd.merge(failures, successes, left_on=['name', 'project_name'], right_on=['name', 'project_name'], how='left')
Но я получаю эту ошибку — кто-нибудь может мне помочь, пожалуйста?
/usr/local/lib/python3.8/site-packages/pandas/core/reshape/merge.py:643: UserWarning: merging between different levels can give an unintended result (1 levels on the left,2 on the right)
warnings.warn(msg, UserWarning)
Комментарии:
1. Пожалуйста, опубликуйте образцы ваших двух DFS
Ответ №1:
Я думаю, что это должно быть написано таким образом:
successes.merge(failures, on=['name', 'project_name'])
Ответ №2:
Это происходит при объединении фреймов данных с разными уровнями индексов столбцов. Приведенный ниже искусственный пример воспроизводит ваше предупреждение:
import pandas as pd
# a has 2 level column index
a = pd.DataFrame({("name_0","name_01"):[1,2,3,4],
("name_0","name_02"):[4,3,2,1]})
# b has 1 level column index
b = pd.DataFrame({"name_0":[10,2,30,40],
"name_1":[40,30,20,10]})
# Notice how left_on accepts list of tuples. Tuples can be used to adress multilevel columns
pd.merge(a,b,how="left",left_on=[("name_0","name_01")],right_on=["name_0"])
Если вместо этого вы используете только уровень 1 многоуровневого индекса столбца в фрейме данных «a», это предупреждение исчезает:
import pandas as pd
a = pd.DataFrame({("name_0","name_01"):[1,2,3,4],
("name_0","name_02"):[4,3,2,1]})
# Only use the 1st level index (e.g. "name_01" and "name_02")
a.columns = a.columns.get_level_values(1)
b = pd.DataFrame({"name_0":[10,2,30,40],
"name_1":[40,30,20,10]})
# Notice how left_on is now a normal string since only 1 level is used
pd.merge(a,b,how="left",left_on=["name_01"],right_on=["name_0"])
Я предлагаю вам проверить, имеют ли оба ваших фрейма данных одинаковые индексы уровня. Если нет, рассмотрите возможность удаления одного уровня или выравнивания их до одного уровня.