想对 DataFrame 二维表内包含括号的数据进行处理
具体是 包含()的元素,只保留()内的内容,不包含的不作处理
df = pd.DataFrame([["x(a)","(ab)","c","d"],["a","2b","2x(3c)y","d"],["a","b","c","4(d)e"]])
0 1 2 3
0 x(a) (ab) c d
1 a 2b 2x(3c)y d
2 a b c 4(d)e
其中含括号的值 只保留括号里面的内容,不含括号的不作处理
如第一行处理后 :a ab c d
已找到如下 正则表达式匹配方式
p1 = re.compile(r'[(](.*?)[)]', re.S)
print(''.join(re.findall(p1, '2x(3c)y')))
3c
参照 stackoverflow 上的这篇 DataFrame 替换字符串的帖子
https://stackoverflow.com/questions/48214863/python-replace-whole-values-in-dataframe-string-and-not-substrings 想使用 df.apply 方法,结合 lambda 表达式 完成元素内容的正则判断,如果含括号就 replace ()里面的内容,不含就不做更改,保持 DataFrame layout
尝试了 写不出,不知道有没有朋友,能帮忙写一下 判断字符串是否包含()并实现这个条件替换,或者有其他思路 处理 DataFrame
Gatsbywl
2021-03-29 13:33:03 +08:00
def getString(s):
pattern = r'[(](.*?)[)]'
reString = re.compile(pattern, re.S)
tmpString = re.findall(reString, s)
return tmpString[0] if tmpString else s
df.applymap(getString)
===================================
或者一行,易读性不好:
df.applymap(lambda s:re.findall(re.compile(r'[(](.*?)[)]', re.S), s)[0] if re.findall(re.compile(r'[(](.*?)[)]', re.S), s) else s)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/766094
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.