2016-12-07 4 views
1

Ich habe eine coluknn meiner Daten, die ist:ersetzen '?' mit Nan oder Null

Power: 
0  130 
1  165 
2  150 
3  150 
4  ? 
5  198 
6  220 
7  215 
8  225 
9  ? 
10 170 

und ich möchte jeden ersetzen ‚?‘ mit Nan oder Null.

Ich habe versucht:

data['Power'].str.replace('?', 0).astype(float) 
data['Power'].str.replace('^[^\d]*', '').astype(float) 
data['Power'].replace(r'\s+', np.nan, regex=True) 
data['Power'].convert_objects(convert_numeric=True) 
data['Power'].replace(regex=True,inplace=True,to_replace=r'\D',value=r'') 

aber keines dieser Werke!

Einige erzeugen einen Fehler could not convert string to float und einige erzeugten keine Fehler, aber änderten das '?' Nicht.

+0

Wie sieht die Variable 'data' aus? –

+0

Ihr erster Versuch hätte funktioniert, wenn 0 eine Zeichenfolge wäre. –

Antwort

4

Wenn nur alle nicht numerische Werte NaN Verwendung to_numeric ersetzen müssen:

data.Power = pd.to_numeric(data.Power, errors='coerce') 
print (data) 
    Power 
0 130.0 
1 165.0 
2 150.0 
3 150.0 
4  NaN 
5 198.0 
6 220.0 
7 215.0 
8 225.0 
9  NaN 
10 170.0 

Wenn Bedarf 0 dann fillna hinzufügen mit den Darstellern zu int:

data.Power = pd.to_numeric(data.Power, errors='coerce').fillna(0).astype(int) 
print (data) 
    Power 
0  130 
1  165 
2  150 
3  150 
4  0 
5  198 
6  220 
7  215 
8  225 
9  0 
10 170 
1
# to replace with 0 
df.Power = df.Power.replace(to_replace='?', value = 0) 
# to replace with NaN 
import numpy as np 
df.Power = df.Power.replace(to_replace='?', value = np.nan) 
+0

Helfen Sie mir, diese Antwort zu verbessern? Ich dachte, ich hätte den Titel der Frage gut beantwortet –

1

Sie können dies auch stattdessen versuchen:

data['Power'].apply(lambda s: eval(str(s).replace('?', '0'))) 
1
import pandas as pd 

df = pd.DataFrame({ 
        'Power':[130,165,150,'?',198,220,215,225,'?',170] 
        }) 

df.where(df.Power != '?', 0) 

Ausgang:

Power 
0 130 
1 165 
2 150 
3  0 
4 198 
5 220 
6 215 
7 225 
8  0 
9 170 

df.where(df.Power != '?', 'foo') 

Ausgang

Power 
0 130 
1 165 
2 150 
3 foo 
4 198 
5 220 
6 215 
7 225 
8 foo 
9 170 

Werke mit so ziemlich alles, und es sagt, in der Dokumentation, die es schnell ist. The where() Method and Masking

Verwandte Themen