Python 在一个csv文件中组合多个数据帧,每个数据帧用一个空行分隔
如何用空行分隔每个数据帧 我用这个片段把它们组合起来Python 在一个csv文件中组合多个数据帧,每个数据帧用一个空行分隔,python,pandas,Python,Pandas,如何用空行分隔每个数据帧 我用这个片段把它们组合起来 frames1 = [df4, df5, df6] Summary = pd.concat(frames1) 那么我如何用一个空行拆分它们呢?您可以使用下面的示例: 创建测试dfs df1 = pd.DataFrame(np.random.randint(0,20,20).reshape(5,4),columns=list('ABCD')) df2 = pd.DataFrame(np.random.randint(0,20,20).re
frames1 = [df4, df5, df6]
Summary = pd.concat(frames1)
那么我如何用一个空行拆分它们呢?您可以使用下面的示例: 创建测试dfs
df1 = pd.DataFrame(np.random.randint(0,20,20).reshape(5,4),columns=list('ABCD'))
df2 = pd.DataFrame(np.random.randint(0,20,20).reshape(5,4),columns=list('ABCD'))
df3 = pd.DataFrame(np.random.randint(0,20,20).reshape(5,4),columns=list('ABCD'))
dfs=[df1,df2,df3]
解决方案:
pd.concat([df.append(pd.Series(), ignore_index=True) for df in dfs])
对于水平堆叠:
pd.concat([df.assign(test=np.nan) for df in dfs],axis=1)
您可以使用以下示例,该示例有效: 创建测试dfs
df1 = pd.DataFrame(np.random.randint(0,20,20).reshape(5,4),columns=list('ABCD'))
df2 = pd.DataFrame(np.random.randint(0,20,20).reshape(5,4),columns=list('ABCD'))
df3 = pd.DataFrame(np.random.randint(0,20,20).reshape(5,4),columns=list('ABCD'))
dfs=[df1,df2,df3]
解决方案:
pd.concat([df.append(pd.Series(), ignore_index=True) for df in dfs])
对于水平堆叠:
pd.concat([df.assign(test=np.nan) for df in dfs],axis=1)
这就是你想要的吗
fname = 'test2.csv'
frames1 = [df4, df5, df6]
with open(fname, mode='a+') as f:
for df in frames1:
df.to_csv(fname, mode='a', header = f.tell() == 0)
f.write('\n')
test2.csv
:
,a,b,c
0,0,1,2
1,3,4,5
2,6,7,8
0,0,1,2
1,3,4,5
2,6,7,8
0,0,1,2
1,3,4,5
2,6,7,8
,a,b,c, ,a,b,c, ,a,b,c,
0,0,1,2, ,0,1,2, ,0,1,2,
1,3,4,5, ,3,4,5, ,3,4,5,
2,6,7,8, ,6,7,8, ,6,7,8,
0,0,1,2, ,0,1,2, ,0,1,2,
1,3,4,5, ,3,4,5, ,3,4,5,
2,6,7,8, ,6,7,8, ,6,7,8,
f.tell()==0
检查文件句柄是否位于文件的开头,即0处,如果是,则打印头,否则不打印头
注意:我对所有df
s使用了相同的值,这就是所有结果相似的原因
对于列:
test3.csv
:
,a,b,c
0,0,1,2
1,3,4,5
2,6,7,8
0,0,1,2
1,3,4,5
2,6,7,8
0,0,1,2
1,3,4,5
2,6,7,8
,a,b,c, ,a,b,c, ,a,b,c,
0,0,1,2, ,0,1,2, ,0,1,2,
1,3,4,5, ,3,4,5, ,3,4,5,
2,6,7,8, ,6,7,8, ,6,7,8,
0,0,1,2, ,0,1,2, ,0,1,2,
1,3,4,5, ,3,4,5, ,3,4,5,
2,6,7,8, ,6,7,8, ,6,7,8,
但这些柱子的间距不会相等。如果使用标题=False保存:
test3.csv
:
,a,b,c
0,0,1,2
1,3,4,5
2,6,7,8
0,0,1,2
1,3,4,5
2,6,7,8
0,0,1,2
1,3,4,5
2,6,7,8
,a,b,c, ,a,b,c, ,a,b,c,
0,0,1,2, ,0,1,2, ,0,1,2,
1,3,4,5, ,3,4,5, ,3,4,5,
2,6,7,8, ,6,7,8, ,6,7,8,
0,0,1,2, ,0,1,2, ,0,1,2,
1,3,4,5, ,3,4,5, ,3,4,5,
2,6,7,8, ,6,7,8, ,6,7,8,
这就是你想要的吗
fname = 'test2.csv'
frames1 = [df4, df5, df6]
with open(fname, mode='a+') as f:
for df in frames1:
df.to_csv(fname, mode='a', header = f.tell() == 0)
f.write('\n')
test2.csv
:
,a,b,c
0,0,1,2
1,3,4,5
2,6,7,8
0,0,1,2
1,3,4,5
2,6,7,8
0,0,1,2
1,3,4,5
2,6,7,8
,a,b,c, ,a,b,c, ,a,b,c,
0,0,1,2, ,0,1,2, ,0,1,2,
1,3,4,5, ,3,4,5, ,3,4,5,
2,6,7,8, ,6,7,8, ,6,7,8,
0,0,1,2, ,0,1,2, ,0,1,2,
1,3,4,5, ,3,4,5, ,3,4,5,
2,6,7,8, ,6,7,8, ,6,7,8,
f.tell()==0
检查文件句柄是否位于文件的开头,即0处,如果是,则打印头,否则不打印头
注意:我对所有df
s使用了相同的值,这就是所有结果相似的原因
对于列:
test3.csv
:
,a,b,c
0,0,1,2
1,3,4,5
2,6,7,8
0,0,1,2
1,3,4,5
2,6,7,8
0,0,1,2
1,3,4,5
2,6,7,8
,a,b,c, ,a,b,c, ,a,b,c,
0,0,1,2, ,0,1,2, ,0,1,2,
1,3,4,5, ,3,4,5, ,3,4,5,
2,6,7,8, ,6,7,8, ,6,7,8,
0,0,1,2, ,0,1,2, ,0,1,2,
1,3,4,5, ,3,4,5, ,3,4,5,
2,6,7,8, ,6,7,8, ,6,7,8,
但这些柱子的间距不会相等。如果使用标题=False保存:
test3.csv
:
,a,b,c
0,0,1,2
1,3,4,5
2,6,7,8
0,0,1,2
1,3,4,5
2,6,7,8
0,0,1,2
1,3,4,5
2,6,7,8
,a,b,c, ,a,b,c, ,a,b,c,
0,0,1,2, ,0,1,2, ,0,1,2,
1,3,4,5, ,3,4,5, ,3,4,5,
2,6,7,8, ,6,7,8, ,6,7,8,
0,0,1,2, ,0,1,2, ,0,1,2,
1,3,4,5, ,3,4,5, ,3,4,5,
2,6,7,8, ,6,7,8, ,6,7,8,
你知道如何用列而不是行来分隔它们吗?好的,也许一些键参数、多索引和展平列可以防止重复的列名称。你知道如何用列而不是行来分隔它们吗?好的,也许一些键参数,“多索引”和“展平”列对于防止重复列应该很好。如何将它们与列分隔开?@ashrafkhaled Edited,请检查。如何将它们与列分隔开?@ashrafkhaled Edited,请检查。