【发布时间】:2021-06-21 13:27:51
【问题描述】:
我有一个数据集,其中有包含字母数字值的列。我现在可以过滤不匹配的记录,我想清理它们,这意味着例如不匹配的记录是123*abc&,那么它应该删除123abc。我已经做到了,但我认为这不是正确的方法,并且在最终结果之后合并数据,我可以使用 for 循环正确获取它们,但这将是一个缓慢的过程。因此寻找一种更简单的方法(逐列清洗)。有可能吗?
data = ['abc123','abc*123&','Abc123','ABC@*&123',np.nan,'123*Abc']
df=pd.DataFrame(data, columns=['a'])
print(df)
a
0 abc123
1 abc*123&
2 Abc123
3 ABC@*&123
4 NaN
5 123*Abc
过滤不匹配的记录:
wrong=df[~df['a'].str.contains(numeric, na=True)]
print(wrong)
a
1 abc*123&
3 ABC@*&123
5 123*Abc
wrong_index = wrong.index
result = ''.join(i for i in wrong['a'] if not i.isalpha())
alphanumeric = [character for character in result if character.isalnum()]
alphanumeric = "".join(alphanumeric)
df['a'].loc[wrong_index]=alphanumeric
print(df)
a
0 abc123
1 abc123ABC123123Abc
2 Abc123
3 abc123ABC123123Abc
4 NaN
5 abc123ABC123123Abc
我知道为什么会发生这种情况,可以通过使用 for 或遍历每一行来解决,但它会消耗大量时间。有什么方法可以逐列清理吗?
异常输出:
a
0 abc123
1 abc123
2 Abc123
3 ABC123
4 NaN
5 123Abc
【问题讨论】:
标签: python regex dataframe re alphanumeric