Wenn diese Strings sind, dann Schwimmer sind wahrscheinlich auch Saiten.
Ihre Datenrahmen Unter der Annahme df
, würde ich
pd.to_numeric(df.stack(), 'coerce').unstack()
Deeper Erklärung
versuchen Pandas in der Regel nicht fehlen Schwimmer mit '-'
darstellen. Daher muss '-'
eine Zeichenfolge sein. So muss die dtype
einer beliebigen Spalte mit einer '-'
darin 'object'
sein. Das macht es sehr wahrscheinlich, dass, was auch immer die Daten analysierte, die Floats als String belassen wurden.
Setup
from io import StringIO
import pandas as pd
txt = """T2MN T2MX RH2M DFP2M RAIN
6.96 9.32 84.27 5.57 -
6.31 10.46 - 5.63 -
- 10.66 79.38 3.63 -
0.79 4.45 94.24 1.85 -
1.45 3.99 91.71 1.17 - """
df = pd.read_csv(StringIO(txt), delim_whitespace=True)
print(df)
T2MN T2MX RH2M DFP2M RAIN
0 6.96 9.32 84.27 5.57 -
1 6.31 10.46 - 5.63 -
2 - 10.66 79.38 3.63 -
3 0.79 4.45 94.24 1.85 -
4 1.45 3.99 91.71 1.17 -
Was sind die dtypes
?
print(df.dtypes)
T2MN object
T2MX float64
RH2M object
DFP2M float64
RAIN object
dtype: object
Was ist der Typ des ersten Elements? Diese
print(type(df.iloc[0, 0]))
<class 'str'>
bedeutet, dass jede Spalte mit einer '-'
wie eine Säule von Strings ist, die wie Schwimmer aussehen. Sie möchten pd.to_numeric
mit dem Parameter errors='coerce'
verwenden, um nicht numerische Elemente auf np.nan
zu erzwingen. pd.to_numeric
funktioniert jedoch nicht auf pd.DataFrame
, also wir stack
und unstack
.
pd.to_numeric(df.stack(), 'coerce').unstack()
T2MN T2MX RH2M DFP2M RAIN
0 6.96 9.32 84.27 5.57 NaN
1 6.31 10.46 NaN 5.63 NaN
2 NaN 10.66 79.38 3.63 NaN
3 0.79 4.45 94.24 1.85 NaN
4 1.45 3.99 91.71 1.17 NaN
Das ist für nan wie der Anzeigewert sieht –