如何在Pandas DataFrame中按||||拆分列?已尝试方案未生效
解决Pandas按多字符分隔符拆分CSV列的问题
我来帮你搞定这个拆分列的问题!先梳理下你的场景:
你CSV里的目标列内容是这样的:
[u"ABC||||'ABCDadfasf||||'random something', 'another random'] [u"ABCD||||'ABCDadfasf||||'random somethingadf', 'another random adsd'] [u"ABDC||||'ABCDasdadfasf||||'random something random', 'another something random']想要按
||||拆分成三列,但用了指定sep的read_csv后,列根本没被拆分,代码是这样的:Cov = pd.read_csv("path to CSV.csv", sep='||||', names = ["col 1", "col 2", "col 3"], engine = 'python')
问题出在哪?
核心原因是:当你用engine='python'时,Pandas会把sep参数的字符串当作正则表达式来解析。而|在正则里是表示“或”的特殊符号,||||会被解析成匹配空字符串,自然没法正确识别你要的分隔符。
两种可行的解决方案
方案1:读取时直接转义分隔符
把|转义成正则能识别的字面量,有两种简洁写法:
# 写法1:给每个|加转义符 Cov = pd.read_csv("path to CSV.csv", sep='\\|\\|\\|\\|', names=["col 1", "col 2", "col 3"], engine='python') # 写法2:用原始字符串(r开头)加转义,更清爽 Cov = pd.read_csv("path to CSV.csv", sep=r'\|\|\|\|', names=["col 1", "col 2", "col 3"], engine='python')
方案2:先读整列,再拆分(更稳妥)
如果怕正则转义搞混,不如先把整个列读进来,再用str.split按字面量拆分,这种方式更直观,不容易出错:
# 先读取CSV,假设原始数据没有表头,用names指定原始列名 df = pd.read_csv("path to CSV.csv", header=None, names=['original_col']) # 按'||||'拆分,expand=True会自动把拆分结果转成多列 df[["col 1", "col 2", "col 3"]] = df['original_col'].str.split('||||', expand=True) # 可选:删掉原始的合并列 df = df.drop('original_col', axis=1)
内容的提问来源于stack exchange,提问作者Ashish Garg
相关产品推荐
相关产品推荐

