首页 > 解决方案 > 如果列包含 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)

然后工作正常。但是通过所有列的迭代不起作用。

欢迎任何帮助。

标签: pythonpandas

解决方案


您需要先转换为字符串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列(显然是strings):

for el in df.select_dtypes(object).columns:
    if df[el].str.contains('%').any():
        df[el] = df[el].str.strip("%").astype(float) 

推荐阅读