我一直在研究一个包含与产品相关的unigrams的数据集。在数据框架中,我们有像cadbury9gm或100gmdoritos这样的unigrams,所以我想删除包含这些名称的整行,即包含数值,以使数据帧更加干净,以便我可以继续进行,因为我必须按类别和子类别对产品进行分类类别。有没有办法删除包含数字字符的行? 感谢
答案 0 :(得分:1)
这就是我要做的事情:
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
答案 1 :(得分:0)
试试这个:
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函数。
希望这有帮助