Как объединить два кадра данных в python Pandas? Почему некоторые значения пропускаются при объединении? - PullRequest
0 голосов
/ 02 марта 2020

Здесь есть три кадра данных: energy, ScimEn и GDP. Прежде чем объединить energy и ScimEn, я попытался напечатать energy, и я получаю все 227 значений. При попытке печати ScimEn я получаю все значения в соответствии с рангом (от 1 до 15). Однако, когда я вызываю функцию слияния в зависимости от страны, пропускаются первые четыре рейтинга. Кроме того, он начинается с рейтинга 5. Я не могу отладить код. Пожалуйста, игнорируйте комментарии, так как я пытался распечатать все в любой момент времени как часть отладки.

import pandas as pd
import numpy as np
def answer_one():
    energy = pd.read_excel ('Energy Indicators.xls',skiprows=17,skip_footer=(38))
    energy=energy[[2,3,4,5]]
    energy.columns=['Country','Energy Supply','Energy Supply per Capita','% Renewable']
    energy=energy.replace('...',np.NaN)
    #print(energy.columns)
    energy['Energy Supply']=1000000*energy['Energy Supply']
    energy['Country']=energy['Country'].replace({"Republic of Korea": "South Korea"})
    energy['Country']=energy['Country'].replace({"United States of America": "United States"})
    energy['Country']=energy['Country'].replace({"United Kingdom of Great Britain and Northern Ireland": "United Kingdom"})
    energy['Country']=energy['Country'].replace({"China, Hong Kong Special Administrative Region": "Hong Kong"})
    energy['Country']=energy['Country'].str.replace(r"\(.\)","")
    #print(energy)
    GDP=pd.read_csv('world_bank.csv',skiprows=4)
    GDP=GDP[[0,50,51,52,53,54,55,56,57,58,59]]
    GDP=GDP.rename(columns={'Country Name':'Country'})
    #print(GDP.columns)
    #print(GDP)
    ScimEn=pd.read_excel('scimagojr-3.xlsx')
    #print(ScimEn)
    ScimEn=ScimEn[:15]
    #print(ScimEn)
    new_df=pd.merge(ScimEn,energy,how='inner',left_on='Country',right_on='Country')
    #print(new_df)
    #print(df1.sort_values('Rank',ascending=True))
    new_df_final=pd.merge(new_df,GDP,how='inner',left_on='Country',right_on='Country')
    #print(new_df_final.columns)
    #new_df_final=new_df_final.sort_values('Rank',ascending=True)
    #new_df_final=new_df_final[:15]
    new_df_final=new_df_final.set_index('Country')
    #print(final_df)
    return new_df_final
answer_one()

1 Ответ

0 голосов
/ 03 марта 2020

Здесь вы выполняете внутреннее объединение между этими 3 фреймами данных (энергия, ScimEn и GDP) в столбце Country. Внутреннее объединение дает только те строки, которые имеют совпадающую страну во всех 3 фреймах данных. у ваших данных может не быть соответствующей страны в первых 4 рейтингах.

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

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