如何读取含多组带空格逗号列表的文本为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
相关产品推荐
相关产品推荐

