pd.read_csv读取CSV时如何忽略括号内的逗号作为分隔符
正确实现代码
你需要使用负向先行断言的正则匹配括号外的逗号,同时要指定 pandas 用 Python 解析引擎(默认C引擎不支持正则分隔符),完整一行代码如下:
df = pd.read_csv("C:/Users/Marek/Downloads/0deg-5ms.csv", skiprows=5, delimiter=r',\s*(?![^()]*\))', engine='python')
正则逻辑说明
,\s*:先匹配逗号和逗号后跟随的任意数量空白符,顺带处理原数据中逗号后的空格,避免列值带前导空格(?![^()]*\)):负向先行断言,规则是:当前匹配的逗号后面,如果直到出现右括号)为止都没有出现左括号(,说明这个逗号在括号内部,就跳过不匹配;反之就判定为括号外的分隔逗号。
之前尝试失败的原因
- 你写的
delimiter=',^(\(.*,.*\))'完全不符合正则匹配逻辑,无法命中任何逗号,所以所有内容都被识别为同一列 - 你写的
,|(?:(\(.*,.*\)))会把括号内的内容也识别成分隔符,所以每匹配到一次括号内容就会多生成一个空列
内容的提问来源于stack exchange,提问作者Ruli
相关产品推荐
相关产品推荐

