【发布时间】:2021-10-22 08:40:34
【问题描述】:
我想在数据框中查找与字符串模式匹配的列。我特别想找到两个部分,首先找到包含“WORDABC”的列,然后我想找到也是该列的“1”值的列(即“WORDABC1”)。为此,我一直在使用.str.contains Pandas 函数。
我的问题是当有两个数字时,例如“11”或“13”。
df = pd.DataFrame({'WORDABC1': {0: 1, 1: 2, 2: 3},
'WORDABC11': {0: 4, 1: 5, 2: 6},
'WORDABC8N123': {0: 7, 1: 8, 2: 9},
'WORDABC81N123': {0: 10, 1: 11, 2: 12},
'WORDABC9N123': {0: 13, 1: 14, 2: 15},
'WORDABC99N123': {0: 16, 1: 17, 2: 18}})
尝试搜索包含“WORDABC1”的列会给出两个结果,“WORDABC1”和
df[df.columns[df.columns.str.contains(pat = 'WORDABC1')]]
WORDABC1 WORDABC11
0 1 4
1 2 5
2 3 6
df[df.columns[df.columns.str.contains(pat = 'WORDABC1\\b')]]
WORDABC1
0 1
1 2
2 3
对于上面的示例,它适用于我。但是,如果在我找到的模式之后有更多字符,就会出现我的问题。
df[df.columns[df.columns.str.contains(pat = 'WORDABC9')]]
WORDABC9N123 WORDABC99N123
0 13 16
1 14 17
2 15 18
df[df.columns[df.columns.str.contains(pat = 'WORDABC9\\b')]]
Empty DataFrame
Columns: []
Index: [0, 1, 2]
我只想要“WORDABC9N123”列,而不能只删除另一列。我曾考虑过只使用df[df.columns[df.columns.str.contains(pat = 'WORDABC9')][0]] 来获得我想要的系列,但这会产生另一个问题。
我也一直在使用诸如(df.columns.str.contains(pat = 'WORDABC1\\b')).sum() 之类的东西来创建真值陈述,所以上面的df[0] 方法并不能帮助我解决这个问题。
有没有更好的方法来代替 str.contains?还是我的正则表达式不正确?谢谢!
【问题讨论】:
-
目前还不清楚规则是什么。只是模式的末尾不能有额外的数字吗?
标签: python regex pandas dataframe