查找包含子字符串的列并将其替换-Pandas

时间:2019-05-14 11:18:05

标签: python string pandas dataframe

我在数据框中的特殊字符有问题。例如

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

1 个答案:

答案 0 :(得分:2)

这是使用列表推导和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
相关问题