我在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/

10-12 23:14