Pandas删除列中的所有特殊字符

5

我有一个数据框,其中 '%' 列适用于所有列,而一列的最后一行为 '<1%'。

Out[277]: 

   Year Conventional  HMO  PPO  POS HDHP/SO
0  1988          73%  16%  11%             
1  1993          46%  21%  26%   7%        
2  1996          27%  31%  28%  14%        
3  1999          10%  28%  39%  24%        
4  2000           8%  29%  42%  21%  6% 
.   .
.   . 
.   . 
22  2018          <1%  16%  49% 29%

我想在列中删除所有特殊字符。我已经尝试过:

df1.columns= df1.columns.str.replace('\w,'') 

并且

df.columns= df.columns.str.replace('[^a-zA-Z0-9]', '')

我在这两个方面都成功地去掉了“%”符号,但没有去掉“<”符号。进行如下操作:

df1['Conventional']= df1['Conventional'].map(lambda x: ''.join([i for i in x if i.isdigit()]))

抛出错误:

类型错误:'float'对象不可迭代

理想情况下,我希望用一行代码从整个数据框中删除所有特殊字符。

1个回答

3

首先使用DataFrame.replace,然后再使用<%

df = df.replace(r'[<%]', '', regex=True)

或者通过所有非数字值:
df = df.replace(r'\D+', '', regex=True)

然后将除第一个列以外的所有列设置为float

df.iloc[:, 1:] = df.iloc[:, 1:].astype(float)

1
谢谢!我已经成功删除了特殊字符,但是在转换为浮点数方面没有成功。我遇到了这个错误:“ValueError: could not convert string to float:”。我尝试使用.astype(int)将其转换为整数,但它会抛出以下错误:“ValueError:invalid literal for int()with base 10:''”。 - aRad
@aRad - 请问 df = df.replace([r'[<%]', r'^\s*$'], ['',np.nan], regex=True) 这段代码是如何工作的? - jezrael
它将空字符串替换为NaN - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接