我有一个包含多列的数据框,并且我想删除所有仅*包含任何标点符号的列。例如
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。我该如何实现?
问题来源:stackoverflow
想法是测试列的所有值是否由DataFrame.apply
和DataFrame.all
中的Series.str.contains包含,最后由
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
如果可能的话,可以在字符串中获取remove的所有值,在字符串的开头添加^
,在字符串的末尾添加$
,然后通过〜
反转掩码:
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
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。