删除具有常量字母数字值的 pandas 列

Drop pandas column with constant alphanumeric values

我有一个包含大约 200 万条记录的数据框 df。 某些列仅包含字母数字值(例如“wer345”、“gfer34”、“123fdst”)。

是否有 pythonic 方法来删​​除这些列(例如使用 isalnum())?

应用Series.str.isalnum column-wise to mask all the alphanumeric values of the DataFrame. Then use DataFrame.all 查找仅包含字母数字值的列。将生成的布尔系列反转为 select 仅包含至少一个 non-alphanumeric 值的列。

is_alnum_col = df.apply(lambda col: col.str.isalnum()).all()
res = df.loc[:, ~is_alnum_col]

例子

import pandas as pd

df = pd.DataFrame({
    'a': ['aas', 'sd12', '1232'],
    'b': ['sdds', 'nnm!!', 'ab-2'],
    'c': ['sdsd', 'asaas12', '12.34'],
})

is_alnum_col = df.apply(lambda col: col.str.isalnum()).all()
res = df.loc[:, ~is_alnum_col]

输出:

>>> df

      a      b        c
0   aas   sdds     sdsd
1  sd12  nnm!!  asaas12
2  1232   ab-2    12.34

>>> df.apply(lambda col: col.str.isalnum())

      a      b      c
0  True   True   True
1  True  False   True
2  True  False  False

>>> is_alnum_col

a     True
b    False
c    False
dtype: bool

>>> res

       b        c
0   sdds     sdsd
1  nnm!!  asaas12
2   ab-2    12.34