使用glob后如何将数据框合并到一个csv文件中?

Posted

技术标签:

【中文标题】使用glob后如何将数据框合并到一个csv文件中?【英文标题】:How to merge data frame into one csv file after using glob? 【发布时间】:2019-07-18 09:24:36 【问题描述】:

我曾尝试使用 glob 处理几个 csv 文件,例如:

import glob 
import pandas as pd
import numpy as np
import csv

# Read all csv files with same file name in the folder
filenames = sorted(glob.glob('./16_2018-02*.csv'))

for f in filenames:
    df = pd.read_csv(f, names=['Date','RSSI','Data','Code'], 
    index_col=None)

    # Slicing information 
    df["ID"] = df["Data"].str.slice(0,2)
    df["X"] = df["Data"].str.slice(2,4)

    # Save the output data to csv with different name 
    df.to_csv(f'f[:-4]-train.csv', index=False)

在代码的最后,我曾经将每个数据框保存到一个新的不同名称的 csv 文件中。考虑到现在我有这么多 csv 数据可以使用,我想在不先写入每个 csv 文件的情况下将它们连接起来。我该怎么做?

原始数据集前 5 行:

Date                            RSSI    Data                        Code        
2018-02-20T00:00:20.886+09:00   -99 1068ffd703d101ec77f425ea98b201  F2D5    
2018-02-20T00:00:21.904+09:00   -95 103cffbc032901ee77f49dea98b301  F2D5        
2018-02-20T00:00:22.415+09:00   -97 103cffbc032901ee77f49dea98b301  F2D5         
2018-02-20T00:00:46.580+09:00   -96 10fdfda803ff01f477f49dfd98cb03  F2D1        
2018-02-20T00:00:48.593+09:00   -96 101bfed3037401f577f49dfe98cd03  F2D6    

之后:

Date                            RSSI    Data                        Code    ID  X   
2018-02-20T00:00:20.886+09:00   -99 1068ffd703d101ec77f425ea98b201  F2D5    16  0.065384    
2018-02-20T00:00:21.904+09:00   -95 103cffbc032901ee77f49dea98b301  F2D5    16  0.065340        
2018-02-20T00:00:22.415+09:00   -97 103cffbc032901ee77f49dea98b301  F2D5    16  0.065340         
2018-02-20T00:00:46.580+09:00   -96 10fdfda803ff01f477f49dfd98cb03  F2D1    16  0.065021    
2018-02-20T00:00:48.593+09:00   -96 101bfed3037401f577f49dfe98cd03  F2D6    16  0.065051    

【问题讨论】:

您能否提供几个样本数据集以及您希望结果是什么样的? @IanThompson 数据集包含 4 列('Date'、'RSSI'、'Data'、'Code')的许多行。在此过程中,我添加了 2 个新列(ID,X),然后所有文件都单独保存在 csv 文件中(例如,从文件夹中的 10 个数据集,它将被保存到 10 个 csv 输出文件中)... @IanThompson ..虽然现在我想要的结果不是几个 csv 文件,而是一个连接一个标题的 csv 文件。 你能把它的样子贴出来吗?例如,csvs 中的两个的前 5 行是什么样的?以代码格式的文本发布它们,以便我们可以直接复制它们并更快地为您提供答案。 @IanThompson 在问题中添加。 【参考方案1】:

试试下面的代码[将所有文件附加到一个文件]

filenames = sorted(glob.glob('./16_2018-02*.csv'))
appended_data=[] #create a list
for f in filenames:
    df = pd.read_csv(f, names=['Date','RSSI','Data','Code'], 
    index_col=None)

    # Slicing information 
    df["ID"] = df["Data"].str.slice(0,2)
    df["X"] = df["Data"].str.slice(2,4)
    appended_data.append(df) #append to the list
appended_data = pd.concat(appended_data, axis=1) #concat them together
#remove axis=1 if need to append vertically

appended_data 现在是一个数据框,所有文件都附加在一起发布,您可以将其导出到 csv/excel。

【讨论】:

我尝试不使用“axis=1”,因为我需要将其垂直附加,但出现此错误:ValueError:计划形状未对齐。试图找出原因,因为没有。列数应该相同。 @npm 检查这个:***.com/questions/26226343/… 相反,我尝试使用较小的数据集,您的解决方案有效,谢谢!我可能只需要稍后检查每个数据集。

以上是关于使用glob后如何将数据框合并到一个csv文件中?的主要内容,如果未能解决你的问题,请参考以下文章

将共享 2 列的多个 CSV 文件合并到一个唯一的数据框中

如何使用 read_csv 从文件中导入某些行

如何将不同 .csv 文件中的所有数据合并到一个表中?

如何将多个 XML 文件解析为多个 CSV 文件?

如何将数据框导出到数据湖中的 CSV 文件? [复制]

将许多 CSV 合并到不同的数据框中