本来规整的csv数据通过pandas读取后变得不规整的原因以及如何解决(CSV文件中读取时数据分割问题)
程序员文章站
2022-06-05 18:58:53
...
原始数据:
通过pandas.read_csv处理完导出的数据
原因:
刚开始我也是苦思冥想却不得其法,不知道为啥好好的数据使用pandas读取后就变得不规整了,从网上搜索得知CSV(Comma-Separated Values),CSV文件默认用英文逗号作为列分隔符,通过将title中的数据取出来发现里面存在多个逗号,于是在写入另一个csv中时,title原来为一个字段的内容被分割成了多个字段,进而导致了上面的问题,现在找到了问题,如何解决呢?
解决方法:通过写代码将逗号替换为其他字符,如空格,句号等字符
举例:
import csv
dirs = "F:\\data\\data.csv"
with open(dirs, 'r', encoding='utf-8') as f:
for index, line in enumerate(f): # 想要同时读取数据及其索引使用enumerate()方法
if index == 0:
field = [['doi', 'type', 'isbn', 'container_isbn',
'author_n', 'title', 'cited_by', 'pub_year']] # 第一行写入字段
with open('data_update.csv', 'a', newline='') as file:
writer = csv.writer(file)
for row in field:
writer.writerow(row)
else:
res = []
temp = line.split(',')
a = list(map(lambda x: x.strip().strip('"'), temp)) # 高效for loop
title = ' '.join(a[5:-2]) # 通过空格代替逗号,产生连接后的数据
del a[5:-2] # 删除原字段
a.insert(5, title) # 将新title字段插入列表中
res.append(a)
with open('data_update.csv', 'a', newline='') as file:
writer = csv.writer(file)
for row in res:
writer.writerow(row)
感想:当时是需要用pandas处理将近1亿条数据,因为里面数据不规整,所以我先将pandas.read_csv的数据设置为error_bad_lines=False,这样就可以忽略这种字段读入有问题的一行数据而且还会留一个索引,然后我通过python将这些索引提取出来,然后从原csv文件中根据索引将有问题的数据整条读入一个csv文件中再进行的处理