объединение фреймов данных pandas в нескольких столбцах — ошибка об уровнях

#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"])
  

Я предлагаю вам проверить, имеют ли оба ваших фрейма данных одинаковые индексы уровня. Если нет, рассмотрите возможность удаления одного уровня или выравнивания их до одного уровня.