2017-04-09 2 views
2

Ich habe einen Datenrahmen mit meinem Index ‚Land‘ bekommen mag ich den Namen von mehreren Ländern ändern, ich habe die alten/neuen Werte in einem Wörterbuch, wie unten:ändern Werte in einer Spalte aus einer Liste

Ich habe versucht, die Werte in einer Liste von und zu aufteilen, und das würde auch nicht funktionieren. Der Code ist nicht fehlerhaft, aber die Werte in meinem Datenframe haben sich nicht geändert.

`import pandas as pd 
import numpy as np 

energy = (pd.read_excel('Energy Indicators.xls', 
         skiprows=17, 
         skip_footer=38)) 

energy = (energy.drop(energy.columns[[0, 1]], axis=1)) 
energy.columns = ['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable']   
energy['Energy Supply'] = energy['Energy Supply'].apply(lambda x: x*1000000) 

#This code isn't working properly 
energy['Country'] = energy['Country'].replace({'China, Hong Kong Special Administrative Region':'Hong Kong', 'United Kingdom of Great Britain and Northern Ireland':'United Kingdom', 'Republic of Korea':'South Korea', 'United States of America':'United States', 'Iran (Islamic Republic of)':'Iran'})` 

Gelöst: Dies war ein Problem mit den Daten, die ich nicht bemerkt hatte.

energy['Country'] = (energy['Country'].str.replace('\s*\(.*?\)\s*', '').str.replace('\d+','')) 

Diese Linie unter der ‚Problem‘ Linie sitzt wurde, als es eigentlich ist es vor dem ersetzen bis zu reinigen war erforderlich, könnte funktionieren. z.B. United States of America20 war eigentlich in der Excel-Datei, so ersetzen Sie übersprungen

Vielen Dank für Ihre Hilfe!

+0

Ca Sie einige Daten hinzufügen Probe? Ich teste es und es funktioniert perfekt. – jezrael

+0

Ich habe kein Passwort :( – jezrael

+0

Bitte ändern Sie die Antwort. – jezrael

Antwort

3

Sie entfernen müssen supercript von replace:

d = {'China, Hong Kong Special Administrative Region':'Hong Kong', 
    'United Kingdom of Great Britain and Northern Ireland':'United Kingdom', 
    'Republic of Korea':'South Korea', 'United States of America':'United States', 
    'Iran (Islamic Republic of)':'Iran'} 

energy['Country'] = energy['Country'].str.replace('\d+', '').replace(d) 

Auch können Sie Ihre Lösung verbessern - Verwendung Parameter usecols zum Filtern von Spalten und names für setzen neue Spaltennamen:

names = ['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable'] 

energy = pd.read_excel('Energy Indicators.xls', 
         skiprows=17, 
         skip_footer=38, 
         usecols=range(2,6), 
         names=names) 


d = {'China, Hong Kong Special Administrative Region':'Hong Kong', 
    'United Kingdom of Great Britain and Northern Ireland':'United Kingdom', 
    'Republic of Korea':'South Korea', 'United States of America':'United States', 
    'Iran (Islamic Republic of)':'Iran'} 

#for multiple is faster use * 
energy['Energy Supply'] = energy['Energy Supply'] * 1000000 
energy['Country'] = energy['Country'].str.replace('\d', '').replace(d) 
#print (energy) 
+0

Nur entdeckt und hinzugefügt, um die Antwort oben .. Danke :) –

+0

Vielen Dank. Ich versuche auch ein bisschen Ihre Lösung zu verbessern, bitte überprüfen Sie es. Wenn meine Antwort hilfreich war, vergiss sie nicht [accept] (http://meta.stackexchange.com/a/5235/295067). Vielen Dank. – jezrael

+0

Super, danke –

Verwandte Themen