我有1000多个csv文件,我想将其中csv文件名的前五位数字相同的地方合并到一个csv文件中。
input:
100044566.csv
100040457.csv
100041458.csv
100034566.csv
100030457.csv
100031458.csv
100031459.csv
import pandas as pd
import os
import glob
path_1 =''
all_files_final = glob.glob(os.path.join(path_1, "*.csv"))
names_1 = [os.path.basename(x1) for x1 in all_files_final]
final = pd.DataFrame()
for file_1, name_1 in zip(all_files_final, names_1):
file_df_final = pd.read_csv(file_1,index_col=False)
#file_df['file_name'] = name
final = final.append(file_df_final)
final.to_csv('',index=False)
我使用了上面的代码,但是将所有文件合并到一个csv文件中,我不知道必须根据名称进行选择
所以从上面的输入 输出1:将前三个csv文件合并到一个csv文件中,因为文件名的前五位数相同。
输出2:将后4个文件合并到一个csv文件中,因为文件名的前5位数字相同。
答案 0 :(得分:0)
我建议您以略有不同的方式来解决该问题。
这是我的解决方案:
import os
import pandas as pd
files = os.listdir('.') # returns list of filenames in current folder
files_of_interest = {} # a dictionary that we will be using in future
for filename in files: # iterate over files in a folder
if filename[-4:] == '.csv': # check whether a file is of .csv format
key = filename[:5] # as you've mentioned in you question - first five characters of filename is of interest
files_of_interest.setdefault(key,[]) #if we dont have such key - .setdefault will create such key for us and assign empy list to it
files_of_interest[key].append(filename) # append to a list new filename
for key in files_of_interest:
buff_df = pd.DataFrame()
for filename in files_of_interest[key]:
buff_df= buff_df.append(pd.read_csv(filename)) # iterate over every filename for specific key in dictionary and appending it to buff_df
files_of_interest[key]=buff_df # replacing list of files by a data frame
此代码将创建一个数据帧字典。字典的键将是 .csv 文件的第一个唯一字符集。
然后,您可以遍历字典的键以将每个相应的数据帧另存为 .csv 文件。
希望我的回答有所帮助。