我有很多csv文件,它们的列数不同
大多数csv文件都有4列宽,可以读取并连接
但是,当遇到超过4列的文件时,脚本会出错
我收到以下错误消息:Error tokenizing data. C error: Expected 4 fields in line 125, saw 8.
如果重构代码(如下(以包含pd.read_csv
的error_bad_lines=False
,则
代码将完成并输出一个组合的csv,该csv仅包含包含4列的行。
如何解决此错误并连接所有内容
没有索引,所以我只需要将csv信息堆叠在一起。
非常感谢
import os
import glob
import pandas as pd
all_filenames = [
# think this is working correctly with bunch of replies.csv extensions
i for i in glob.glob('C:\Users\tkim1\Python Scripts\output\*\replies.csv')
]
print(all_filenames)
# combine all files in the list
combined_csv = pd.concat([
pd.read_csv(f, error_bad_lines=False) for f in all_filenames
], sort=False)
# export to csv
combined_csv.to_csv("combined_replies.csv", index=False, encoding='utf-8-sig')
这里的问题是pandas.concat,而不是pandas.read_csv。concat函数不允许连接具有不同列数的DataFrame对象。
我能想到的解决这个问题的唯一方法是找出列数较少的DataFrame(比列数最大的DataFrame少(,将每个DataFrame中所需的额外列设置为NaN,然后应用pd.concat.
# for example, if df1 has 3 columns and df2 has 2 columns, set the third column in df2
# to NaN, then apply concat.
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'0': np.arange(1, 100),
'1': np.arange(100, 1, -1)})
df2 = pd.DataFrame({'0': np.arange(100, 200),
'1': np.arange(200, 100, -1),
'2': np.arange(400, 500)})
df2['2'] = np.nan
df3 = pd.concat([df1, df2])