删除所有满足正则表达式条件的行



试图自学熊猫..并玩弄不同的dtype

我有一个 df 如下

df = pd.DataFrame({'ID':[0,2,"bike","cake"], 'Course':['Test','Math','Store','History'] })
print(df)
ID  Course
0   0   Test
1   2   Math
2   bike    Store
3   cake    History

ID 的 dtype 当然是一个对象。我想做的是删除 DF 中的任何行,如果 ID 中有字符串。

我以为这会很简单。

df.ID.filter(regex='[w]*')

但是这返回了一切,有没有可靠的火处理这种事情的方法?

您可以使用to_numeric

df[pd.to_numeric(df.ID,errors='coerce').notnull()]
Out[450]: 
Course ID
0   Test  0
1   Math  2

另一种选择是将列转换为字符串并使用str.match

print(df[df['ID'].astype(str).str.match("d+")])
#  Course ID
#0   Test  0
#1   Math  2

您的代码不起作用,因为如pandas.DataFrame.filter文档中所述:

请注意,此例程不会根据数据帧的内容筛选数据帧。筛选器将应用于索引的标签。

Wen的回答是解决这个问题的正确(也是最快的(方法,但要解释为什么你的正则表达式不起作用,你必须理解w的意思。

w匹配任何单词字符,其中包括[a-zA-Z0-9_]。 因此,您当前匹配的内容包括数字,因此所有内容都匹配。 有效的正则表达式方法是:

df.loc[df.ID.astype(str).str.match(r'd+')]

ID Course
0  0   Test
1  2   Math

第二个问题是你对filter的使用。 它不是筛选ID行,而是筛选索引。 使用filter的有效解决方案如下:

df.set_index('ID').filter(regex=r'^d+$', axis=0)

Course
ID
0    Test
2    Math

最新更新