2017-01-09 12 views
0

現在、私はパンダを習っています。割り当てのために私はデータフレームにマージする必要があります。これは、イランであるものを除いて、私が必要とする上位15のレコードでは成功です。単一のレコードでマージ機能が動作しません

+---------+-------+------------+--------------------+------------+-----------------+-------------------------+----------+----------------+---------------------------+--------------+---------------+ 
|   | Rank | Documents | Citable documents | Citations | Self-citations | Citations per document | H index | Energy Supply | Energy Supply per Capita | % Renewable |  2006  | 
+---------+-------+------------+--------------------+------------+-----------------+-------------------------+----------+----------------+---------------------------+--------------+---------------+ 
| Country |  |   |     |   |     |       |   |    |       |    |    | 
| Iran | 13.0 | 8896.0  | 8819.0    | 57470.0 | 19125.0   | 6.46     | 72.0  | NaN   | NaN      | NaN   | 3.895523e+11 | 
| Iran | NaN | NaN  | NaN    | NaN  | NaN    | NaN      | NaN  | 9172000000  | 119.0      | 5.707721  | NaN   | 
+---------+-------+------------+--------------------+------------+-----------------+-------------------------+----------+----------------+---------------------------+--------------+---------------+ 

私は実際には「内部」をマージしたいが、その後、イランには結果が示されていない:私は「外」のマージを行うと、それは私にこれを提示します。 2つのイランの記録が合併しなかった原因は何か?

これは私がマージする方法です:

combined2 = pd.merge(combined1, energy, how='outer', on='Country') 

combined1データフレームは、私がチェックし、イランのための単一のレコードが含まれている別のマージ、からです。この私がenergyデータフレームを作成する方法である:

country_dict = {"Republic of Korea": "South Korea", 
      "United States of America": "United States", 
      "United Kingdom of Great Britain and Northern Ireland": "United Kingdom", 
      "China, Hong Kong Special Administrative Region": "Hong Kong", 
      "Korea, Rep.": "South Korea", 
      "Iran, Islamic Rep.": "Iran", 
      "Hong Kong SAR, China": "Hong Kong"} 

def convert_county_name(name): 
    name = re.sub("\(.*\)", "", name) 
    name = re.sub("[0-9]", "", name) 
    for k, v in country_dict.items(): 
     name = name.replace(k, v) 
    return name 

en_converters = {1 : lambda x: x * 1000000 if isinstance(x, numbers.Number) else x, 
       0 : convert_county_name} 
energy = pd.read_excel("Energy Indicators.xls", 
         skiprows = 17, 
         skip_footer = 38, 
         parse_cols = [2,3,4,5], 
         names = ['Country', 'Energy Supply', 'Energy Supply per Capita', 
           '% Renewable'], 
         na_values="...", 
         converters = en_converters) 
+2

値 'Iran'が重複しているようで、最高はいくつかの小さなデータサンプルをテストするための使用であります。別の可能性のある問題は、「イラン」や「イラン」のような空白部分です。 – jezrael

+0

どのように愚かなのですか? Jupyterの表では表示されなかったので、特定の要素を印刷したときに、実際に ''イラン ''の後に空白がありました –

+0

ええ、このタイプのエラーは非常に難しいですあなたは前にそれを満たしていない... – jezrael

答えて

0

私は空白を削除するconvert_country_name機能を変更:

def convert_county_name(name): 
    name = re.sub("\(.*\)", "", name) 
    name = re.sub("[0-9]", "", name) 
    for k, v in country_dict.items(): 
     name = name.replace(k, v) 
    name = name.strip() 
    return name 
関連する問題