![](/img/trans.png)
[英]Python: Copy identical .csv files from various folders (each folder has one .csv file) into a single folder
[英]How to create a new dataframe/CSV file from reading contents of files from various folders in python
我有多个文件夹,其中包含 CSV 个带值的文件。 我需要创建一个新的数据框/CSV 文件,其中每个文件和每个文件夹的每一列的内容都放在这个新的 dataframe 中
文件夹-1
A1.CSV
A B C D
aa bb cc dd
文件夹-2
B1.CSV
E F G H
ee ff gg hh
文件夹-3
C1.CSV
I J K L
ii jj kk ll
D1.CSV
M N O P
mm nn oo pp
新数据框应该是
A B C D E F H I O P
aa bb cc dd ee ff hh ii oo pp
我相信你正在寻找的东西可以用pd.concat()
来完成。
您必须遍历每个文件夹中的每个文件,将单独的 csv 文件加载为新的 DataFrame,然后将其连接到沿轴 1(列)的数据帧的 rest。
假设您的工作目录是存储“Folder-1”、“Folder-2”等所有文件夹的位置,并且该目录中没有其他文件夹/文件,您可以使用此代码:
import os
import pandas as pd
# First creating your 'complete DataFrame' as an empty DataFrame.
complete_df = pd.DataFrame()
# Iterating through folders and files to find each csv:
for folder_name in os.listdir():
for csv_file in os.listdir(folder_name):
# Loading the individual csv as a pandas DataFrame
csv_df = pd.read_csv(f"{folder_name}/{csv_file}")
# If complete_df is empty, overwrite it with the first csv df.
if len(complete_df) == 0:
complete_df = csv_df
# Otherwise, add the new csv df to the current complete df.
else:
complete_df = pd.concat([complete_df, csv_df], axis=1)
该代码还假定每个文件夹中的唯一文件是 csv 个文件。
对于它的价值,如果您的最终 DataFrame 实际上只是一行和多列,我建议将其转置为多行且只有一列 - 将 csv 文件存储在此效率更高格式。
注意:我在上面的代码中插入了 f-strings 的使用; 这些仅在您的 Python 版本为 3.6+ 时才有效。 如果没有,您应该能够用 .format() 方法或使用字符串添加来替换此部分。
假设 python 脚本位于子文件夹的根目录下,我将执行以下操作:
import pandas as pd
import glob
# Initiate result DataFrame
result = pd.DataFrame()
# Loop over csv files in sub folders
for csv_file in glob.glob("*/*.csv"):
# Concat each new DataFrame with the result
result = pd.concat([result, pd.read_csv(csv_file, sep=',')], axis=1)
print(result)
注意 csv 分隔符。
祝你好运
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.