简体   繁体   中英

How to concatenate two csv files in python

I have a code in which I have tried to merge several csv files using pd.concat(), the issue I have is that the concatenated file has the last column of file1.csv and the first column of file2.csv merged in a single cell (and same for file.csv and file3.csv) as illustrated below. I would appreciate any help in this regard.

file1 = 'file1.csv'
file2 = 'file2.csv'
file3 = 'file3.csv'
df1 = pd.read_csv( file1, sep="\n" ,na_values='NA')
df2 = pd.read_csv( file2, sep="\n" ,na_values='NA')
df3 = pd.read_csv( file3, sep="\n" ,na_values='NA')
BigDf = pd.concat([df1, df2,df3], axis=1)
BigDf.to_csv('final.csv', sep="\t", index = False)

eg. file1.csv is


       A      B      C      
0  False  False  False  
1   True   True  False   
2  False  False  False   
3  False  False  False  

file2.csv is

      D     E      F     
0  False  False  False  
1   True   True  False   
2  False  False  False   
3  False  False  False  
 
   

the merged file should be


       A      B      C      D     E     F     
0  False  False  False    False  False  False 
1  True   True  False     True   True  False
2  False  False  False    False  False  False 
3  False  False  False    False  False  False 

instead it is

       A      B      CD     E     F     
0  False  False  FalseFalse  False  False 
1  True   True   FalseTrue   True  False
2  False  False  FalseFalse  False  False 
3  False  False  FalseFalse  False  False 

concat is working as expected for me, see the code below,

import pandas as pd

df1 = pd.read_clipboard()
df1
       A      B      C
0  False  False  False
1   True   True  False
2  False  False  False
3  False  False  False

df2 = pd.read_clipboard()
df2
       D      E      F
0  False  False  False
1   True   True  False
2  False  False  False
3  False  False  False

pd.concat([df1, df2], axis=1)
       A      B      C      D      E      F
0  False  False  False  False  False  False
1   True   True  False   True   True  False
2  False  False  False  False  False  False
3  False  False  False  False  False  False

df_new = pd.concat([df1, df2], axis=1)
df_new
       A      B      C      D      E      F
0  False  False  False  False  False  False
1   True   True  False   True   True  False
2  False  False  False  False  False  False
3  False  False  False  False  False  False

df_new.to_csv("test.csv", sep='\t', index=False)

df_new_loaded = pd.read_csv("test.csv", sep='\t')
df_new_loaded
       A      B      C      D      E      F
0  False  False  False  False  False  False
1   True   True  False   True   True  False
2  False  False  False  False  False  False
3  False  False  False  False  False  False

df_new_loaded.columns
Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')

df_new_loaded
       A      B      C      D      E      F
0  False  False  False  False  False  False
1   True   True  False   True   True  False
2  False  False  False  False  False  False
3  False  False  False  False  False  False

You can try

pd.concat([df1, df2], axis='col')

But it may give you the same result

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM