我正在尝试使用可容纳缺失列的熊猫自动化一个简单的数据透视表。源数据是.csv导出,包含相当统一的数据。但是,有时源数据中缺少一列或多列。因此,我试图创建一个程序来处理可变列标题并相应地旋转数据。
因此,如果源数据中存在所有列,则完整的透视图已完成(如下所示),程序将停止。
df = pd.read_csv(csv_file)
Overview = df[['Column1','Column2','Column3','Column4']]
Overview = Overview.pivot_table(index="Column1",
values = ['Column2','Column3','Column4'],
aggfunc = {'Column2':len,'Column3':np.sum, 'Column4':np.sum})
如果缺少一列,则完成一个有限的枢轴(如下)。该程序将在此处停止。
Overview = df[['Column1','Column2','Column3']]
Overview = Overview.pivot_table(index="Column1",
values = ['Column2','Column3'],
aggfunc = {'Column2':len,'Column3':np.sum})
如果缺少大多数列,则该最后的枢轴完成,程序结束。
Overview = df[['Column1','Column2']]
Overview = Overview.pivot_table(index="Column1",
values = ['Column2'],
aggfunc = {'Column2':len})
答案 0 :(得分:0)
这是一个漫长的解决方案...
请注意,我假设.csv文件中始终存在“ Column1”。您的示例都表明“ Column1”将可用。
#Define which columns you want to check for (in this case, all of them)
list_of_columns = ['Column1','Column2','Column3','Column4']
lst = [] #Create dummy list
dels = [] #Create dummy list for deleting dictionary key/value pairs later
for l in list_of_columns:
if l in df.columns.tolist():
lst.append(l)
else:
dels.append(l)
#Define all functions possible for certain columns outside of index
d = {'Column2':len,'Column3':np.sum, 'Column4':np.sum}
#Remove key/value pairs from dictionary if a column is not present in .csv
for i in dels:
del dels[i]
Overview = df[lst].pivot_table(index="Column1",
values = [lst[1:],
aggfunc = d)
希望这会有所帮助!也可以随意将代码定义为函数。