python - 如果列包含 Pandas 中的字符,则更改列类型
问题描述
例如,我在某些列(非空对象)中有字符“%”的值
col1 col2 col3
'4.24%' '5.22%' 8
但我想要 4.24 和 5.22 作为浮点数。
I have tried with:
for el in df.columns:
if df[el].str.contains('%').any():
df[el] = df[el].str.strip("%").astype(float)
并且说 :AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas
如果我使用:
if df['col1'].str.contains('%').any():
df['col1'] = df['col1'].str.strip("%").astype(float)
然后工作正常。但是通过所有列的迭代不起作用。
欢迎任何帮助。
解决方案
您需要先转换为字符串str.contains('%')
,因为它还测试非字符串列:
for el in df.columns:
if df[el].astype(str).str.contains('%').any():
df[el] = df[el].str.strip("%").astype(float)
print (df)
col1 col2 col3
0 4.24 5.22 8
另一个更好的解决方案是select_dtypes
仅用于选择object
列(显然是string
s):
for el in df.select_dtypes(object).columns:
if df[el].str.contains('%').any():
df[el] = df[el].str.strip("%").astype(float)
推荐阅读
- json - 如何在谷歌脚本中获取 json 字符串的某些元素
- c# - 如何读取 URI 中存在的 excel 文件
- python - 使用空白电子邮件添加多个 Django 用户
- javascript - 未捕获的类型错误:无法读取 null 的属性“offsetTop”(导航栏)
- sql-server - 如何使用带有“like”和“parameter”的“sp_executesql”?
- google-chrome-extension - 从 chrome 弹出窗口打开扩展 html 页面
- javascript - 如何从函数参数中的数字中删除前导零
- kubernetes - 通过 Kubernetes API 获取 docker image LABELS
- jquery - 跳过第一次获取 - jquery
- javascript - 为什么这两个 If 语句不一样?