如何用Python将含多值单元格的CSV单列转换为列表
解决单列CSV含多值单元格的读取问题
我在StackOverflow上翻了好多解答,但还是没搞定自己的问题。我有个只有一列的CSV文件,列名是Values,内容大概是这样的:
abc
xyz
bcd,fgh
tew,skdh,fsh
能看到有些单元格里是用逗号分隔的多个值。我写了这段代码:
with open('dat.csv', 'rb') as inputfile: reader = csv.reader(inputfile) colnames=['Keywords'] data = pandas.read_csv('dat.csv', names=colnames) lkn=data.values.tolist() print lkn
但输出完全不是我想要的,想请教怎么解决。
别担心,我来帮你捋捋问题出在哪,以及怎么修正:
首先你写的代码里有个小冗余——你用csv.reader打开了文件但根本没用到它,直接删掉这部分就行,不影响结果。
核心问题是:pandas默认把逗号当作CSV的列分隔符,所以那些带逗号的单元格会被自动拆成多列,导致你的数据结构完全乱掉。要解决这个,我们得告诉pandas不要把内容里的逗号当成分隔符,因为你的CSV只有一列,所有内容都属于这一列。
给你两个实用的解决方案:
方案一:用pandas正确读取单列数据
我们可以指定一个几乎不会在数据里出现的字符作为分隔符,比如\x01(一个控制字符),这样pandas就会把整行内容都当成单列的取值。修改后的代码如下:
import pandas as pd # 记得先导入pandas哦 colnames = ['Keywords'] # 指定特殊分隔符,确保整行作为一列读取 data = pd.read_csv('dat.csv', names=colnames, sep='\x01', engine='python') lkn = data.values.tolist() print(lkn)
这样读取后,那些带逗号的单元格会被完整保留,不会被拆分,输出就是你预期的格式了。
方案二:手动读取每行内容(更简洁)
如果只是想提取所有行的内容,不需要用pandas的数据分析功能,直接手动读取每行更简单:
with open('dat.csv', 'r') as inputfile: next(inputfile) # 如果CSV第一行是列名"Values",就跳过这行;没有的话删掉这句 lkn = [line.strip() for line in inputfile] print(lkn)
这个方法直接读取每行,去掉换行符,得到的列表每个元素就是原CSV里的每一行内容,完美保留带逗号的单元格。
内容的提问来源于stack exchange,提问作者Amal Sailendran
相关产品推荐
相关产品推荐

