首页 > 解决方案 > 查找包含子字符串的列并替换它 - Pandas

问题描述

我对数据框中的特殊字符有疑问。例如

ID  license     value1     value2   value3 ...
2     a       "5,120.000"    15%     45    ...
1     b       "3,246.440"    10%     65    ...
4     b       "1,890.220"    50%     10    ...
5     c       "2,005.240"    32%     12    ...

问题是我有这么多列,大约 150 列,如果我逐列逐列并单独替换值是不行的。所以,我需要替换任何特殊字符并将数字(此时 - 字符串列)转换为浮动。

我尝试过这样的事情:

def drop_percent(data):
    for el in data.columns:
        if data[el].astype(str).str.contains('%').any():
            data[el] = data[el].str.strip("%").astype(float)
    return data


def drop_commas(data):
    for el in data.columns:
        if data[el].astype(str).str.contains(',').any():
            mcd[el] = mcd[el].str.replace(',','')
        if data[el].astype(str).str.contains('"').any():
            mcd[el] = mcd[el].str.replace('"', '')
            mcd[el] = mcd[el].astype(float)

    return data

我的错误是:

AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas

标签: pythonstringpandasdataframe

解决方案


这是使用列表理解和从列中删除所有非特殊字符的简单直接的方法str.replace

(pd.concat([df[col].astype(str).str.replace(r'\W+', '', regex=True) 
           for col in df.columns], 1))

  license   value1 value2 value3
2       a  5120000     15     45
1       b  3246440     10     65
4       b  1890220     50     10
5       c  2005240     32     12

推荐阅读