Pandas: Wie kann man alle Werte einer Spalte ändern?

Ich habe einen Datenrahmen mit einer Spalte namens "Date" und wünschte, dass alle Werte aus dieser Spalte denselben Wert haben (nur das Jahr). Beispiel:

 City Date Paris 01/04/2004 Lisbon 01/09/2004 Madrid 2004 Pekin 31/2004 

Was ich will ist:

 City Date Paris 2004 Lisbon 2004 Madrid 2004 Pekin 2004 

Hier ist mein Code:

 fr61_70xls = pd.ExcelFile('AMADEUS FRANCE 1961-1970.xlsx') #Here we import the individual sheets and clean the sheets years=(['1961','1962','1963','1964','1965','1966','1967','1968','1969','1970']) fr={} header=(['City','Country','NACE','Cons','Last_year','Op_Rev_EUR_Last_avail_yr','BvD_Indep_Indic','GUO_Name','Legal_status','Date_of_incorporation','Legal_status_date']) for year in years: # save every sheet in variable fr['1961'], fr['1962'] and so on fr[year]=fr61_70xls.parse(year,header=0,parse_cols=10) fr[year].columns=header # drop the entire Legal status date column fr[year]=fr[year].drop(['Legal_status_date','Date_of_incorporation'],axis=1) # drop every row where GUO Name is empty fr[year]=fr[year].dropna(axis=0,how='all',subset=[['GUO_Name']]) fr[year]=fr[year].set_index(['GUO_Name','Date_of_incorporation']) 

Es passiert, dass in meinen DataFrames, die zum Beispiel fr['1961'] die Werte von Date_of_incorporation alles sein können (Strings, Integer und so weiter), also wäre es am besten, diese Spalte vollständig zu löschen und dann eine weitere Spalte Date_of_incorporation Nur das Jahr zu den DataFrames?

One Solution collect form web for “Pandas: Wie kann man alle Werte einer Spalte ändern?”

Wie @DSM darauf hinweist, können Sie dies direkt mit den vektorisierten String-Methoden ausführen :

 df['Date'].str[-4:].astype(int) 

Oder mit Auszug (vorausgesetzt, es gibt nur einen Satz von Ziffern der Länge 4 irgendwo in jedem String):

 df['Date'].str.extract('(?P<year>\d{4})').astype(int) 

Eine Alternative, die etwas flexibler ist, könnte für die Anwendung apply (oder äquivalent map ), um dies zu tun:

 df['Date'] = df['Date'].apply(lambda x: int(str(x)[-4:])) # converts the last 4 characters of the string to an integer 

Die Lambda-Funktion nimmt die Eingabe vom Date und wandelt sie in ein Jahr um.
Du könntest (und vielleicht auch) das ausführlicher schreiben als:

 def convert_to_year(date_in_some_format); date_as_string = str(date_in_some_format) year_as_string = date_in_some_format[-4:] # last four characters return int(year_as_string) df['Date'] = df['Date'].apply(convert_to_year) 

Vielleicht ist 'Jahr' ein besserer Name für diese Spalte …

  • Rpy2 (Version 2.3.10) - Import von Daten aus R-Paket in Python
  • Auswählen von Pandas-Spalten durch dtype
  • Pandas pct_change () Funktion, die falschen Wert zurückgibt
  • Pandas - Scheibe Großes Dataframe in Chunks
  • Wie resample dataframe
  • Eine Gruppe in Dataframe in Pandas machen
  • Beispiel aus Dataframe unter Beachtung der saisonalen Sequenz
  • Bessere Möglichkeit, zeitgesteuerte Daten zu aggregieren?
  • Plot mehrere DataFrame Spalten in Seaborn FacetGrid
  • Schnellste Möglichkeit, numerische Daten in Python / Pandas / Numpy Array von MySQL zu laden
  • Pandas DataFrame.unstack () Ändert die Reihenfolge der Zeilen und Spaltenüberschriften
  • Python ist die beste Programmiersprache der Welt.