Удалить строки, содержащие числовые символы - PullRequest
0 голосов
/ 12 июня 2018

Я работал над набором данных, который содержит униграммы, связанные с продуктами.В рамках фрейма данных у нас есть униграммы, такие как cadbury9gm или 100gmdoritos, поэтому я хотел бы удалить всю строку, содержащую имена, подобные этим, то есть содержащие числовые значения, чтобы сделать фрейм данных более чистым, чтобы я мог продолжить работу, поскольку мне приходится классифицировать продукты по категориям и подгруппам.категории.Есть ли способ удалить строки, содержащие числовые символы?Спасибо

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Вот что я хотел бы сделать:

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
0 голосов
/ 12 июня 2018

Попробуйте это:

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)

Когда у вас есть этот новый столбец, вы можете запустить ту же самую лямбда-функцию для него.

Надеюсь, это поможет

...