You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取含多组带空格逗号列表的文本为pandas DataFrame

问题场景

现有名为tropical.txt的文本文件,每行存储一个列表格式内容,列表元素间的逗号前后带有多余空格,文件示例内容如下:

space here and space here
         | |
['papaya' , 'mangosteen' , 'banana']
[]
['coconut' , 'mango']
['mangosteen' , 'papaya']

读取踩坑过程

第一次尝试:指定换行符为分隔符

执行代码:

import pandas as pd

df = pd.read_csv('tropical.txt', sep='\n', header=None, engine = 'python')
df

触发报错:

ValueError: Specified \n as separator or delimiter. This forces the python engine which does not accept a line terminator. Hence it is not allowed to use the line terminator as separator.

报错原因是pandas不允许将行终止符\n作为csv分隔符使用。

第二次尝试:移除sep参数

执行代码:

import pandas as pd

df = pd.read_csv('tropical.txt', header= None, engine = 'python')
df

得到的结果会自动按逗号拆分列表内容到多列,生成大量None空值,不符合预期,输出如下:

0           1             2
0   ['papaya'   'mangosteen'    'banana']
1   []               None        None
2   ['coconut'      'mango']     None
3   ['mangosteen'   'papaya']    None

目标输出

将每行的列表整体作为DataFrame单列的一个元素,同时清除列表内逗号前后的多余空格,最终格式如下:

0   
0   [papaya,mangosteen,banana]
1   []  
2   [coconut,mango] 
3   [mangosteen,papaya]

实现方法

不要用read_csv默认的逗号分割逻辑,直接按行读取文本做预处理后再构建DataFrame即可,参考代码:

import pandas as pd

# 按行读取文件,示例文件前2行是空格标注说明,所以用[2:]跳过,实际使用时根据你的文件内容调整
with open('tropical.txt', 'r', encoding='utf-8') as f:
    raw_lines = [line.strip() for line in f.readlines()[2:] if line.strip()]

# 逐行清理内容:移除元素单引号、清除逗号前后多余空格
clean_data = []
for line in raw_lines:
    cleaned = line.replace("'", "").replace(" , ", ",")
    clean_data.append([cleaned])

df = pd.DataFrame(clean_data, columns=[0])

执行后输出结果完全匹配预期:

0
0  [papaya,mangosteen,banana]
1                         []
2            [coconut,mango]
3         [mangosteen,papaya]

如果你的文件没有开头两行标注说明,把f.readlines()[2:]改成f.readlines()即可;如果需要保留列表元素的单引号,删除.replace("'", "")这段代码就行。


内容的提问来源于stack exchange,提问作者nerd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:54:16