删除包含数字字符的行

2024-10-01 00:24:55 发布

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

我一直在研究一个数据集,它包含与产品相关的unigram。在dataframe中,我们有像cadbury9gm或100gmdoritos这样的unigram,所以我想删除包含像这样的名称的整行,也就是说,包含数字值,以使dataframe更干净,这样我可以进一步进行,因为我必须将产品分类为类别和子类别。有没有办法删除包含数字字符的行? 谢谢


Tags: 数据名称dataframe产品分类数字字符类别
2条回答

我会这么做:

import pandas as pd
import numpy as np

bogus_data = {
    'Name': ['Acme', 'Foo', 'Bar', 'Loren', 'Ipsum'],
    'Label': ['abc', '3ds', 'cba', 'b3ewq', 'asdf'],
    'Value': np.random.rand(5)
}

df = pd.DataFrame(bogus_data, columns=['Name', 'Label', 'Value'])
df = df[~df["Label"].str.contains(r'[0-9]')]

print(df)

打印此数据帧的结果是

    Name Label     Value
0   Acme   abc  0.574412
2    Bar   cba  0.354460
4  Ipsum  asdf  0.047170

试试这个:

testdf

    Name    Value
0   Name1   4409
1   Name2   SomeVal
2   Name3   26Text73
3   Name4   SomeVal2
4   Name5   2123Text
5   Name6   Text1904
6   Name7   1Text747
7   Name8   145Text7

# Add a column that validates your contains digit condition
testdf['HasDigit'] = testdf['Value'].map(lambda x: True if any(i.isdigit() for i in str(x)) else False)
testdf
    Name    Value       HasDigit
0   Name1   4409        True
1   Name2   SomeVal     False
2   Name3   26Text73    True
3   Name4   SomeVal2    True
4   Name5   2123Text    True
5   Name6   Text1904    True
6   Name7   1Text747    True
7   Name8   145Text7    True

# Finally retain the ones with value False in 'HasDigit' columns
testdf = testdf[testdf['HasDigit'] == False]
testdf  

    Name    Value       HasDigit
1   Name2   SomeVal     False

稍后可以删除“HasDigit”列。你知道吗

如果您希望基于单个列中的值进行筛选,那么这将非常有效。但是,如果涉及多个列,则可以创建一个新列,该列将所考虑的所有列的字符串值串联起来。举个例子:

testdf['NewCol'] = testdf['Col1'].astype(str) + testdf['Col2'].astype(str) + ... + testdf['Coln'].astype(str)

一旦有了这个新列,就可以对它运行相同的lambda函数。你知道吗

希望这有帮助

相关问题 更多 >