Pandas:如何从列中删除数字和特殊字符

2024-09-29 23:22:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从列中删除除alpha和空格以外的所有字符,但当我使用代码执行相同操作时,它将输出为'nan',而不是NaN(空值)

输入数据:

col1

ABC ad
YQW \2
AQ4 GH
@34
#45
NaN

预期产出:

col1

ABC ad
YQW
AQ GH
NaN
NaN
NaN

我一直在使用的代码:

df['col1'] = df['col1'].astype(str).str.extract(r'([A-Za-z]+(?: [A-Za-z]+)*)')

稍后,我将使用此列检查NaN的条件,但它没有给出,因为在执行上述脚本后,它将NaN值更改为'nan'

注意:如果不通过.astype(str)转换为字符串,我的数据将

AttributeError: Can only use .str accessor with string values!


Tags: 数据alphadfnan字符ghadcol1
2条回答

您可以通过以下步骤执行此操作:

  1. 首先,用空字符串替换NaN值(我们也可以在删除字符后得到空字符串,然后将其转换回NaN
  2. 如果列中的某些元素是非字符串,则通过^{}将列强制转换为字符串类型
  3. 用正则表达式^{}替换非alpha和非空的空字符串
  4. 最后,将空字符串替换为NaN^{}

(注意:前两个步骤是针对OP获取AttributeError: Can only use .str accessor with string values!的问题的特殊处理,尽管我专门添加整数和浮点(不是字符串中的整数和浮点,而是实数值)的测试在没有前两个步骤的情况下也没有问题。可能是其他一些特殊数据类型!)没有相同问题的其他用户只能使用从str.replace()开始的最后两个步骤


df['col1'] = df['col1'].fillna('').astype(str).str.replace(r'[^A-Za-z ]', '', regex=True).replace('', np.nan, regex=False)

结果:

print(df)


     col1
0  ABC ad
1    YQW 
2   AQ GH
3     NaN
4     NaN
5     NaN


注意,我们不能在这里使用.extract(),而必须使用.replace()来去除不需要的字符。像'ab c1d2@ef4'这样的字符串怎么样?使用什么正则表达式模式只提取数字和特殊字符后面的字母和空格?别忘了,我们必须考虑一般情况,而不仅仅是这里的样本数据。我们能在这里引用所有可能的正则表达式模式来处理无限多的alpha、空格、数字和特殊字符模式的组合吗

另一种方法是提取字母数字,但排除数字。请参阅下面的代码

df['col1']=df['col1'].str.extract('(\w+\s\w+[^0-9]|\w+[^0-9])')

    col1
0  ABC ad
1    YQW 
2  AQ4 GH
3     NaN
4     NaN
5     NaN

相关问题 更多 >

    热门问题