删除具有常量字母数字值的 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
我有一个包含大约 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