2017-01-09 2 views
0

Ich lerne derzeit Pandas. Für eine Aufgabe muss ich zu Datenrahmen zusammenführen. Dies ist erfolgreich für die Top 15 Datensätze, die ich brauche, außer für einen, der Iran ist. Wenn ich eine ‚äußere‘ merge tun, stellt es mir dies:Merge-Funktion funktioniert nicht für einen einzelnen Datensatz

+---------+-------+------------+--------------------+------------+-----------------+-------------------------+----------+----------------+---------------------------+--------------+---------------+ 
|   | 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   | 
+---------+-------+------------+--------------------+------------+-----------------+-------------------------+----------+----------------+---------------------------+--------------+---------------+ 

Ich möchte eigentlich eine ‚innere‘ verschmelzen, aber dann werden keine Ergebnisse für Iran gezeigt. Was könnte die Ursache dafür sein, dass die beiden Iran-Aufzeichnungen nicht zusammengeführt werden? Diese

ist, wie ich fusionieren:

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

Die combined1 Datenrahmen von einem anderen verschmelzen, die ich überprüft und die einen einzelnen Datensatz für Iran enthält. Dies ist, wie ich geschaffen, um die energy Datenrahmen:

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

Es scheint Wert 'Iran' dupliziert wird, ist die beste Verwendung für einige kleine Datenprobe testen . Oder ein anderes mögliches Problem sind einige Leerzeichen wie "Iran" und "Iran" – jezrael

+0

Wie dumm! Ich beherrschte die Whitespaces, weil sie in der Jupyter-Tabelle nicht angezeigt wurden, aber als ich das spezifische Element druckte, gab es tatsächlich einen Whitespace nach "Iran" –

+0

Ya, diese Art von Fehler ist sehr schwer zu finden, wenn du triffst es nicht vorher ... – jezrael

Antwort

0

ich die convert_country_name Funktion geändert Leerzeichen zu entfernen:

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 
Verwandte Themen