Как проверить и удалить столбец pandas, если все строки содержат только знаки пунктуации? - PullRequest
1 голос
/ 10 марта 2020

У меня есть фрейм данных с несколькими столбцами, и я хочу удалить такие столбцы, где все строки просто содержат любой знак пунктуации. например,

    col_1 col_2 col_3  col_4
0      1     _    ab    1,235
1      2     ?    cd    8,900
2      3     _    ef    1,235
3      4     -    gh    8,900

Здесь я просто хочу удалить col_2. Как мне этого добиться?

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Идея - проверка, если все значения столбца содержат число или строку по Series.str.contains в DataFrame.apply и DataFrame.all, последний фильтр по DataFrame.loc:

df = df.loc[:, df.astype(str).apply(lambda x: x.str.contains('\d|\w')).all()]

Или:

df = df.loc[:, df.astype(str).apply(lambda x: x.str.contains('\d|[a-zA-Z]')).all()]

print (df)
   col_1 col_3  col_4
0      1    ab  1,235
1      2    cd  8,900
2      3    ef  1,235
3      4    gh  8,900

Если возможно, получить все значения для удаления в строке возможно добавить ^ для начала строки и $ для конца строки, а затем инвертировать маску на ~:

p = """[!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ ]"""
df = df.loc[:, ~df.astype(str).apply(lambda x: x.str.contains('^' + p + '$')).all()]
print (df)
   col_1 col_3  col_4
0      1    ab  1,235
1      2    cd  8,900
2      3    ef  1,235
3      4    gh  8,900
0 голосов
/ 10 марта 2020

Можно использовать метод python string пунктуация и отфильтровать столбец с пунктуацией с помощью метода pandas ' all :

    import string

    #create a list of individual punctuations
    punctuation_list = list(string.punctuation)

    #filter out unwanted column
    df.loc[:,~df.isin(punctuation_list).all()]

    col_1   col_3   col_4
0      1      ab    1,235
1      2      cd    8,900
2      3      ef    1,235
3      4      gh    8,900
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...