首页 > 解决方案 > 在 Python 中跨多个列应用 str.contains 的问题

问题描述

数据框:

col1          col2             col3
132jh.2ad3    34.2             65
298.487       9879.87          1kjh8kjn0
98.47         79.8             90
8763.3        7hkj7kjb.k23l    67
69.3          3765.9           3510

期望的输出:

col1          col2             col3
98.47         79.8             90
69.3          3765.9           3510

我尝试过的:(这不会删除所有带有字母数字值的行)

df=df[~df['col1'].astype(str).str.contains(r'[A-Ba-b]')] #for col1
df=df[~df['col2'].astype(str).str.contains(r'[A-Ba-b]')] #for col2
df=df[~df['col3'].astype(str).str.contains(r'[A-Ba-b]')] #for col3

我想删除所有字母数字行,并且只有包含数字的行。Col1 和 Col2 有小数点,但 Col3 只有整数。
我已经尝试了一些其他类似的线程,但它没有用。

谢谢您的帮助!!

标签: pythonpandasdataframe

解决方案


You can just use to_numeric:

df[df.apply(pd.to_numeric, errors='coerce').notnull().all(1)]

Output:

    col1    col2  col3
2  98.47    79.8    90
4   69.3  3765.9  3510

推荐阅读