[英]Pandas: How to remove numbers and special characters from a column
我正在尝试从列中删除除 alpha 和空格之外的所有字符,但是当我使用代码执行相同操作时,它会将 output 作为'nan'
代替NaN
(空值)
输入数据:
col1
ABC ad
YQW \2
AQ4 GH
@34
#45
NaN
预期 output:
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:只能使用带有字符串值的.str 访问器!
您可以通过以下步骤进行操作:
NaN
值替换为空字符串(我们也可能在删除字符后得到,之后会转换回NaN
)。.astype(str)
将列转换为字符串类型,以防某些元素在列中是非字符串。str.replace()
将非 alpha 和非空白替换为空字符串.replace()
将空字符串替换为NaN
(注意:前两个步骤是针对 OP 获取AttributeError: Can only use.str accessor with string values!
虽然我测试了专门添加 integer 和浮点数(不是 integer 和浮点数,而是实际数值)没有前两个步骤没有问题。也许其他一些特殊的数据类型??)没有相同问题的其他用户只能使用从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'这样的字符串怎么样? 使用什么正则表达式模式仅提取留下数字和特殊字符的字母和空格? 不要忘记我们必须考虑一般情况,而不仅仅是这里的示例数据。 我们可以在这里引用所有可能的正则表达式模式来处理这些字母、空格、数字和特殊字符模式的无限组合吗?
另一种方法是提取字母数字但排除数字。 请参阅下面的代码
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.