我在DataFrame列之一中的数据非常不一致:
col1
12.0
13,1
NaN
20.3
abc
"12,5"
200.9
我需要对这些数据进行标准化,并在数值之间找到最大值,该最大值应小于100。
这是我的代码:
df["col1"] = df["col1"].apply(lambda x: float(str(x).replace(',', '.')) if x.isdigit() else x)
num_temps = pd.to_numeric(df[col],errors='coerce')
temps = num_temps[num_temps<10]
print(temps.max())
例如,当
x
为浮点AttributeError: 'float' object has no attribute 'isdigit'
时,它将失败。 最佳答案
将值由string
强制转换为str(x)
,但是为了进行测试,还必须将.
和,
替换为空值以供使用isdigit
:
df["col1"] = df["col1"].apply(lambda x: float(str(x).replace(',', '.')) if str(x).replace(',', '').replace('.', '').isdigit() else x)
但是这里可能将值强制转换为字符串,然后使用
Series.str.replace
:num_temps = pd.to_numeric(df["col1"].astype(str).str.replace(',', '.'), errors='coerce')
print (df)
col1
0 12.0
1 13.1
2 NaN
3 20.3
4 NaN
5 12.5
6 200.9
temps = num_temps[num_temps<100]
print(temps.max())
20.3
选择:
def f(x):
try:
return float(str(x).replace(',','.'))
except ValueError:
return np.nan
num_temps = df["col1"].apply(f)
print (num_temps)
0 12.0
1 13.1
2 NaN
3 20.3
4 NaN
5 12.5
6 200.9
Name: col1, dtype: float64
关于python - 如何将对象转换为数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55532990/