2017-10-25 18 views
1

Ich habe folgende Daten:Bedingtes Änderung Spalte dtype auf Spalte Subtext basierend

df 
A_Key B_ID C_Key D_NA 
123 22 343.0 23 
121 23 45.4 52 

df.dtypes führt zu folgendem:

df.dtypes 

A_Key int64 
B_ID int64 
C_Key float 
D_NA int64 

Wie kann ich bedingt die die dtypes für alle Spalten ändern mit " Schlüssel "oder" ID "zu einem object? Ich habe über hundert Spalten in meinem tatsächlichen Datenrahmen, also hoffe ich, eine Nachschlage-Methode zu haben.

Meine aktuelle Methode verwendet den folgenden Code, aber klar ist es nicht pythonic und erfordert individuelle Hardcoding:

for col in ['A_Key', 
      'B_ID', 
      'C_Key']: 
    df[col] = df[col].astype('object') 

Meine df.dtypes Ausgabe sollte dann zeigen, wie folgt:

df.dtypes 

A_Key object 
B_ID object 
C_Key object 
D_NA int64 

Thank Sie im Voraus für Ihre Hilfe.

Antwort

1

Versuchen

cols = df.columns[df.columns.str.contains('Key|ID')] 
df[cols] = df[cols].astype('O') 

print(df.dtypes) 

A_Key object 
B_ID  object 
C_Key object 
D_NA  int64 
1

Dies sollte funktionieren:

for col in df.columns: 
    if 'KEY' in col or 'ID' in col: 
     df[col] = df[col].astype('object') 
1

Verwenden Groß- und Kleinschreibung Regex Matching mit str.contains:

m = df.columns.str.contains('(?i)key|id') 
df.iloc[:, m] = df.iloc[:, m].astype(object) 

df.dtypes 

A_Key object 
B_ID  object 
C_Key object 
D_NA  int64 
dtype: object 
Verwandte Themen