pd.read_csv存在csv文件之间列数不同的问题



我有很多csv文件,它们的列数不同
大多数csv文件都有4列宽,可以读取并连接
但是,当遇到超过4列的文件时,脚本会出错

我收到以下错误消息:
Error tokenizing data. C error: Expected 4 fields in line 125, saw 8.

如果重构代码(如下(以包含pd.read_csverror_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])

最新更新