为了账号安全,请及时绑定邮箱和手机立即绑定

如何将对象转换为数字

如何将对象转换为数字

一只萌萌小番薯 2021-12-29 20:29:05
我在 DataFrame 列之一中有非常不一致的数据:col112.013,1NaN20.3abc"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为 float时它会失败AttributeError: 'float' object has no attribute 'isdigit'。
查看完整描述

2 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

将值转换为stringby 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


查看完整回答
反对 回复 2021-12-29
?
四季花海

TA贡献1811条经验 获得超5个赞

这有效:

df.replace(",", ".", regex=True).replace("[a-zA-Z]+", np.NaN, regex=True).dropna().max()


查看完整回答
反对 回复 2021-12-29
  • 2 回答
  • 0 关注
  • 360 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号