Python 如何在数据帧中多次插入标头
我昨天问了这个问题,但有几件事我不清楚,所以我把它重新发布在这里。基本上,我有一个包含13列和500多行的数据框架,我试图每x行添加一个标题 我是个初学者,所以我试过.concat和.append,但我不确定我是否真的做对了 我有一个变量header=['Rk','Player','Age',…]Python 如何在数据帧中多次插入标头,python,pandas,Python,Pandas,我昨天问了这个问题,但有几件事我不清楚,所以我把它重新发布在这里。基本上,我有一个包含13列和500多行的数据框架,我试图每x行添加一个标题 我是个初学者,所以我试过.concat和.append,但我不确定我是否真的做对了 我有一个变量header=['Rk','Player','Age',…] In: print(final.head()) out: index Player Age Tm Pos GP G A P +/- PPP TO
In: print(final.head())
out:
index Player Age Tm Pos GP G A P +/- PPP TOI
0 0 Nikita Kucherov 25 TBL RW 82 41 87 128 24 41 19:58
1 4 Brad Marchand 30 BOS LW 79 36 64 100 15 33 19:37
2 5 Sidney Crosby 31 PIT C 79 35 65 100 18 20 21:00
3 6 Nathan MacKinnon 23 COL C 82 41 58 99 20 31 22:05
4 7 Johnny Gaudreau 25 CGY LW 82 36 63 99 18 29 20:04
我希望每48行打印一次页眉,如果我希望每2行打印一次,它将如下所示:
In: print(final.head())
out:
index Player Age Tm Pos GP G A P +/- PPP TOI
0 0 Nikita Kucherov 25 TBL RW 82 41 87 128 24 41 19:58
1 4 Brad Marchand 30 BOS LW 79 36 64 100 15 33 19:37
Player Age Tm Pos GP G A P +/- PPP TOI
2 5 Sidney Crosby 31 PIT C 79 35 65 100 18 20 21:00
3 6 Nathan MacKinnon 23 COL C 82 41 58 99 20 31 22:05
Player Age Tm Pos GP G A P +/- PPP TOI
4 7 Johnny Gaudreau 25 CGY LW 82 36 63 99 18 29 20:04
注意:当我多次插入时,我并不真正关心标题行的索引列的值是多少,我对这一部分非常宽容。这是可能的,但如果以后需要处理数据,不建议这样做,因为如果将数值与字符串混合,某些函数会失败:
N = 2
#N = 48 with real data
#get index of added values, omit first value
idx = df.index[::N][1:]
#repeat columns to DataFrame
arr = np.broadcast_to(df.columns, (len(idx),len(df.columns)))
df1 = pd.DataFrame(arr, index=idx, columns=df.columns)
#append original and sorting by index
df = df1.append(df).sort_index().reset_index(drop=True)
print (df)
index Player Age Tm Pos GP G A P +/- PPP TOI
0 0 Nikita Kucherov 25 TBL RW 82 41 87 128 24 41 19:58
1 4 Brad Marchand 30 BOS LW 79 36 64 100 15 33 19:37
2 index Player Age Tm Pos GP G A P +/- PPP TOI
3 5 Sidney Crosby 31 PIT C 79 35 65 100 18 20 21:00
4 6 Nathan MacKinnon 23 COL C 82 41 58 99 20 31 22:05
5 index Player Age Tm Pos GP G A P +/- PPP TOI
6 7 Johnny Gaudreau 25 CGY LW 82 36 63 99 18 29 20:04
编辑以将每个拆分的数据框写入一个excel文件中的单独工作表使用:
N = 2
#N = 48 with real data
with pd.ExcelWriter('file.xlsx') as writer:
for i, df1 in enumerate(np.split(df, range(N, len(df), N))):
df1.to_excel(writer, sheet_name=f'Sheet{i}', index=False)
EDIT1:用于将所有数据帧写入同一sheetname:
#https://stackoverflow.com/a/33004253 + added index=False to df.to_excel
def multiple_dfs(df_list, sheets, file_name, spaces):
writer = pd.ExcelWriter(file_name,engine='xlsxwriter')
row = 0
for dataframe in df_list:
dataframe.to_excel(writer,sheet_name=sheets,startrow=row ,startcol=0, index=False)
row = row + len(dataframe.index) + spaces + 1
writer.save()
N = 2
#N = 48 with real data
dfs = np.split(df, range(N, len(df), N))
multiple_dfs(dfs, 'Steetname1', 'file.xlsx', 1)
嗯,原因是什么?因为只能添加类似于标题的行,所以要将数值与字符串混合。所以数字数据的下一步处理是不可能的。这只是为了显示吗?正如jezrael所提到的,混合数据类型将不可能进行后续的某些操作。这非常接近,唯一的一点是我的n值,因为这将是48,或者至少我认为这是应该的。当我将此数据框导出到excel时,excel在打印时每页可以容纳48行。我想让这一行成为每页的第一行。@JackB所以你需要把每一个页眉都写在单独的页上?对于每个excel工作表,有48行带有标题?是的,我希望在打印数据框时,标题位于每页的顶部Excel@JackB-编辑后的答案。这更接近,只是我希望所有答案都在同一张纸上