我正在尝试从循环中向一个csv写一个df,每一行代表一个df,但是一旦所有dfs的标题不相同,我发现一些困难,其中一些有所有日期的值,其他没有
我正在使用类似于此的函数编写df:
def write_csv():
for name, df in data.items():
df.to_csv(meal+'mydf.csv', mode='a')
它为每顿饭创造了一个csv(午餐和晚餐) 每个df都与此类似:
Name Meal 22-03-18 23-03-18 25-03-18
Peter Lunch 12 10 9
或:
Name Meal 22-03-18 23-03-18 25-03-18
Peter Dinner 12 10 9
我试图使用pandas concatenate,但我找不到在函数中实现它的方法。 我的目标是使标题包含所有日期(作为所需输出的示例),如果附加到csv的DataFrame在所有日期中都有或没有值,则该标题是独立的。
Actual output:
Name Meal 22-03-18 23-03-18 25-03-18
Peter Lunch 12 10 9
Mathew Lunch 12 11 11 10 9
Ruth Lunch 9 9 8 9
Anna Lunch 10 12 11 13 10
output with headers:
Name Meal 22-03-18 23-03-18 25-03-18
Peter Lunch 12 10 9
Name Meal 21-03-18 22-03-18 23-03-18 24-03-18 25-03-18
Mathew Lunch 12 11 11 10 9
Name Meal 21-03-18 22-03-18 24-03-18 25-03-18
Ruth Lunch 9 9 8 9
Name Meal 21-03-18 22-03-18 23-03-18 24-03-18 25-03-18
Anna Lunch 10 12 11 13 10
Output desired:
Name Meal 21-03-18 22-03-18 23-03-18 24-03-18 25-03-18
Peter Lunch 12 10 9
Mathew Lunch 12 11 11 10
Ruth Lunch 9 9 8 9
Anna Lunch 10 12 11 13 10
答案 0 :(得分:1)
def write_csv():
df2 = pd.DataFrame()
for name, df in data.items():
df2 = df2.append(df)
df2.to_csv('mydf.csv')
答案 1 :(得分:1)
第一次迭代后,您可以使用to_csv的header = False标志。
def write_csv():
for i, (name, df) in enumerate(data.items()):
df.to_csv('mydf.csv', mode='a', header=(i==0))
答案 2 :(得分:0)
使用以下逻辑(@saucoide),我得到了我想要的输出。
有必要创建一个空的df,而不是填充它,然后groupby meal并打印到csv。
main_df = pd.DataFrame()
for name, df in data.items():
main_df = pd.concat([main_df, df])
main_df_group = main_df.groupby('Meal')
for name, group in main_df_group:
mydf_group = group
mydf_group.to_csv(meal+ ...)