Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一个csv文件中组合多个数据帧,每个数据帧用一个空行分隔_Python_Pandas - Fatal编程技术网

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,请检查。