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