【问题标题】:Delete rows containing Numeric characters删除包含数字字符的行
【发布时间】:2018-11-21 15:38:01
【问题描述】:

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

【问题讨论】:

  • 你试过用thispandas 索引

标签: python dataframe dataset spyder data-cleaning


【解决方案1】:

试试这个:

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 函数。

希望对你有帮助

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2014-04-16
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 2019-12-02
      • 2016-07-16
      相关资源
      最近更新 更多