这个问题有点奇怪和复杂,所以请耐心等待。
我使用pandas
导入了几个大量CSV文件(GB大小)。这些CSV文件是数据采集系统收集的数据转储,我不需要大部分数据,所以我使用usecols
参数来过滤掉相关数据。问题是并非所有CSV文件都包含我需要的所有列(正在使用的数据系统的属性)。
问题在于,如果该列不存在于文件中但在usecols
中指定,则read_csv
会引发错误。
是否有一种直接的方法来强制数据框中的指定列集,如果列不存在,pandas
只返回空白行?我想过为每个文件迭代每个列并将结果序列处理到数据帧中,但这似乎效率低下且难以处理。
答案 0 :(得分:0)
我考虑过为每个文件的每一列进行迭代,并将结果序列处理到数据框中,但这看起来既低效又难以处理。
假设某种主列表all_cols_to_use
,您可以执行以下操作:
def parse_big_csv(csvpath):
with open(csvpath, 'r') as infile:
header = infile.readline().strip().split(',')
cols_to_use = sorted(set(header) & set(all_cols_to_use))
missing_cols = sorted(set(all_cols_to_use) - set(header))
df = pd.read_csv(csvpath, usecols=cols_to_use)
df.loc[:, missing_cols] = np.nan
return df
这假设您可以使用np.nan
填充缺少的列,但应该可以使用。 (另外,如果您连接数据框,则缺少的列将位于最终df中,并在适当时填充np.nan
。)