dataframe.append()合并多个列名相同的文件

 1.dataframe.append()合并

import pandas as pd
import os

all_df=pd.DataFrame()
#"."表示当前文件夹
for parents,dirnames,filenames in os.walk("./testdir/"):
    for filename in filenames:
        a_df=pd.read_csv(os.path.join(parents,filename),encoding="gbk")
        all_df=all_df.append(a_df,ignore_index=True)
print(all_df)
all_df.to_csv("all_file.csv",index=False)

注:本人尝试在 all_df=all_df.append(a_df,ignore_index=True),中设置index=False,提示 append() got an unexpected keyword argument 'igore_index',之前也试过直接写all_df.append(a_df,ignore_index=True),结果只得到Empty DataFrame。

输出为:

       ID sex  subject  score
0   10001   男  English    100
1   10002   女    Maths     85
2   10003   女  English     87
3   10004   女  science    100
4   10005   女  English     95
5   10006   男  science     96
6   10007   女    Maths     89
7   10008   男  science     87
8   10009   男      ICT     85
9   10010   男      ICT     97
10  10011   男    Maths     86
11  10012   男  English     93
12  10013   女    Maths     95
13  10014   女  English    100
14  10015   男  science     94
15  10016   女  English     96
16  10017   男  science     93
17  10018   女    Maths     92
18  10019   男  science     96
19  10020   男      ICT     96
20  10021   男      ICT     93
21  10022   女    Maths     94
22  10023   男  English     82
23  10024   女    Maths     65
24  10025   女  English     78
25  10026   男  science     85
26  10027   女  English     60
27  10028   男  science     71
28  10029   女    Maths     69
29  10030   男  science     77
30  10031   男      ICT     62
31  10032   男      ICT     86
32  10033   女    Maths     76
33  10034   男  English     68
34  10035   女    Maths     89
35  10036   女  English     70
36  10037   男  science     73
37  10038   女  English     76
38  10039   男  science     65
39  10040   女    Maths     61
40  10041   男  science     72
41  10042   男      ICT     74
42  10043   男      ICT     69
43  10044   女    Maths     84
44  10045   男  English     87
45  10046   女    Maths     80
46  10047   女  English     81
47  10048   男  science     86
48  10049   女  English     84
49  10050   男  science     82
50  10051   女    Maths     84
51  10052   男  science     81
52  10053   男      ICT     82
53  10054   男      ICT     87
54  10055   女    Maths     84

2.pd.concat()

import pandas as pd
import os
pd.set_option('display.max_rows',1000)   # 具体的行数或列数可自行设置
pd.set_option('display.max_columns',1000)

all_list=[]
#"."表示当前文件夹
for parents,dirnames,filenames in os.walk("./testdir/"):
    for filename in filenames:
        a_df=pd.read_csv(os.path.join(parents,filename),encoding="gbk")
        all_list.append(a_df)
all_df=pd.concat(all_list,axis=1)
print(all_df)
all_df.to_csv("all_file.csv",index=False)

输出为:

       ID sex  subject  score     ID sex  subject  score     ID sex  subject  \
0   10001   男  English    100  10012   男  English     93  10023   男  English   
1   10002   女    Maths     85  10013   女    Maths     95  10024   女    Maths   
2   10003   女  English     87  10014   女  English    100  10025   女  English   
3   10004   女  science    100  10015   男  science     94  10026   男  science   
4   10005   女  English     95  10016   女  English     96  10027   女  English   
5   10006   男  science     96  10017   男  science     93  10028   男  science   
6   10007   女    Maths     89  10018   女    Maths     92  10029   女    Maths   
7   10008   男  science     87  10019   男  science     96  10030   男  science   
8   10009   男      ICT     85  10020   男      ICT     96  10031   男      ICT   
9   10010   男      ICT     97  10021   男      ICT     93  10032   男      ICT   
10  10011   男    Maths     86  10022   女    Maths     94  10033   女    Maths   

    score     ID sex  subject  score     ID sex  subject  score  
0      82  10034   男  English     68  10045   男  English     87  
1      65  10035   女    Maths     89  10046   女    Maths     80  
2      78  10036   女  English     70  10047   女  English     81  
3      85  10037   男  science     73  10048   男  science     86  
4      60  10038   女  English     76  10049   女  English     84  
5      71  10039   男  science     65  10050   男  science     82  
6      69  10040   女    Maths     61  10051   女    Maths     84  
7      77  10041   男  science     72  10052   男  science     81  
8      62  10042   男      ICT     74  10053   男      ICT     82  
9      86  10043   男      ICT     69  10054   男      ICT     87  
10     76  10044   女    Maths     84  10055   女    Maths     84  

 注意:在all_df=pd.concat(all_list,axis=1)中,当axis = 1的时候,concat就是行对齐,然后将不同列名称的多张表合并。

axis: 需要合并链接的轴,0是行,1是列 

若改为:all_df=pd.concat(all_list,axis=0,ignore_index=True)

则输出为:

       ID sex  subject  score
0   10001   男  English    100
1   10002   女    Maths     85
2   10003   女  English     87
3   10004   女  science    100
4   10005   女  English     95
5   10006   男  science     96
6   10007   女    Maths     89
7   10008   男  science     87
8   10009   男      ICT     85
9   10010   男      ICT     97
10  10011   男    Maths     86
11  10012   男  English     93
12  10013   女    Maths     95
13  10014   女  English    100
14  10015   男  science     94
15  10016   女  English     96
16  10017   男  science     93
17  10018   女    Maths     92
18  10019   男  science     96
19  10020   男      ICT     96
20  10021   男      ICT     93
21  10022   女    Maths     94
22  10023   男  English     82
23  10024   女    Maths     65
24  10025   女  English     78
25  10026   男  science     85
26  10027   女  English     60
27  10028   男  science     71
28  10029   女    Maths     69
29  10030   男  science     77
30  10031   男      ICT     62
31  10032   男      ICT     86
32  10033   女    Maths     76
33  10034   男  English     68
34  10035   女    Maths     89
35  10036   女  English     70
36  10037   男  science     73
37  10038   女  English     76
38  10039   男  science     65
39  10040   女    Maths     61
40  10041   男  science     72
41  10042   男      ICT     74
42  10043   男      ICT     69
43  10044   女    Maths     84
44  10045   男  English     87
45  10046   女    Maths     80
46  10047   女  English     81
47  10048   男  science     86
48  10049   女  English     84
49  10050   男  science     82
50  10051   女    Maths     84
51  10052   男  science     81
52  10053   男      ICT     82
53  10054   男      ICT     87
54  10055   女    Maths     84

注意:

1.os.walk

os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。

os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

top -- 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。

  • root 所指的是当前正在遍历的这个文件夹的本身的地址
  • dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
  • files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
for parents,dirnames,filenames in os.walk("./testdir/"):
    print(parents)
    print("===")
    print(dirnames)
    print("++++++")

输出为:

./testdir/
===
['nextdir']
++++++
./testdir/nextdir
===
['next2']
++++++
./testdir/nextdir\next2
===
[]
++++++

2.os.path.join

os.path.join()和join()

join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串
os.path.join(): 将多个路径组合后返回

join例子如下:

alist=["a","b","c"]
a_str="-".join(alist)
print(a_str)
#输出为:a-b-c

os.path.join()函数:

  • 第一个以”/”开头的参数开始拼接,之前的参数全部丢弃。整个串有多个以”/”开头的参数,从最后”/”开头的的开始往后拼接,之前的参数全部丢弃。

  • 以上一种情况为先。在上一种情况确保情况下,若出现”./”开头的参数,会从”./”开头的参数的上一个参数开始拼接

import pandas as pd
import os
print("1:",os.path.join('aaaa','/bbbb','ccccc.txt')) 
print("2:",os.path.join('/aaaa','/bbbb','/ccccc.txt')) 
print("3:",os.path.join('aaaa','./bbb','ccccc.txt')) 
#1: /bbbb\ccccc.txt
#2: /ccccc.txt
#3: aaaa\./bbb\ccccc.txt

 参考:https://blog.csdn.net/fu6543210/article/details/80032895

https://blog.csdn.net/weixin_33797791/article/details/87246847

https://blog.csdn.net/mr_hhh/article/details/79488445

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值