【问题标题】:How to concatenate csv files with pandas如何将csv文件与熊猫连接起来
【发布时间】:2019-05-20 17:32:26
【问题描述】:

我正在处理数据,我想合并/连接一些 csv 文件。 我尝试了下面的代码,但有一个问题,当我运行脚本时,我收到了下面的错误消息。它似乎无法读取我的文件。

注意:我的 scrypt 与我的 csv 文件位于同一位置。

我该如何解决?

谢谢!!!

我正在使用 Windows 并将 anaconda 与 Spyder 一起使用。它运行 python 3.7

import os
import pandas as pd

L_Log= os.listdir('.')

L_LogClean=[]

for k in range(len(L_Log)):
    if 'Logfile_' in L_Log[k]:
        Tempo = L_Log[k]
        Tempo2 = Tempo[12:16]+Tempo[10:12]+Tempo[8:10]
        Tempo2 = int(Tempo2)
        L_LogClean.append(Tempo2)
        L_LogClean = sorted(L_LogClean)

for k in range(len(L_LogClean)):
    Tempo = str(L_LogClean[k])
    Tempo2 = 'Logfile_' + Tempo[6:8]+Tempo[4:6]+Tempo[0:4]+'.csv'
    L_LogClean[k] = Tempo2
    print(L_LogClean)


dfList=[]
colnames=['No.','Date','Time','Temp1','Unit','Temps2','Unit','Lux2','Unit','BP1','Humidité relat','Unit','CO2','Unit','Présence','Temp1_EnO','Unit','Temp3_EnO','Unit','RH3_EnO','Unit','Chauffage']
for filename in L_LogClean:
    print(filename)
    df=pd.read_csv(filename,header=None)
    dfList.append(df)
concatDf=pd.concat(dfList,axis=0)
concatDf.columns=colnames
concatDf.to_csv('Concat.csv')

我希望有一个 csv 文件,它将是按名称排序的不同文件的串联。 当我运行脚本时,它会显示以下错误消息:

FileNotFoundError: [Errno 2] File b'Logfile_13052019.csv' does not exist: b'Logfile_13052019.csv'

但我的文件 Logfile_13052019.csv 与脚本位于同一文件夹中

更新:

dfList=[]
colnames=['No.','Date','Time','Temp1','Unit','Temps2','Unit','Lux2','Unit','BP1','Humidité relat','Unit','CO2','Unit','Présence','Temp1_EnO','Unit','Temp3_EnO','Unit','RH3_EnO','Unit','Chauffage']
for filename in L_Log:
    filename = "E://PJT/TEST2/" + filename
    print(filename)
    df=pd.read_csv(filename,header=None,error_bad_lines=False, encoding = "ISO-8859-1")
    dfList.append(df)
concatDf=pd.concat(dfList,axis=0)
concatDf.columns=colnames
concatDf.to_csv('Concat.csv')

我编辑了我的代码并得到了这个错误

ValueError: Length mismatch: Expected axis has 1 elements, new values have 22 elements

这个脚本仍然被阻止

更新 2

I added the separator type on my script :
dfList=[]
colnames=['No.','Date','Time','Temp1','Unit','Temps2','Unit','Lux2','Unit','BP1','Humidité relat','Unit','CO2','Unit','Présence','Temp1_EnO','Unit','Temp3_EnO','Unit','RH3_EnO','Unit','Chauffage']
for filename in L_Log:
    filename = "E://PJT/TEST2/" + filename
    print(filename)
    df=pd.read_csv(filename,header=None, sep = ";", error_bad_lines=False, encoding = "ISO-8859-1")
    dfList.append(df)
concatDf=pd.concat(dfList,axis=0)
concatDf.columns=colnames
concatDf.to_csv('Concat.csv')

但我仍然有以下错误消息:

ValueError: Length mismatch: Expected axis has 25 elements, new values have 22 elements

更新 3: 我改变了这部分

dfList=[]
colnames=['bite','No.','Date','Time','Temp1','Unit','Temp2','Unit','Lux2','Unit','BP1','Humidité Relat','Unit','CO2','Unit','Présence','Temp1_EnO','Unit','Temp2_EnO','Unit','Temp3_EnO','Unit','RH3_EnO','Unit','Chauffage']
for filename in L_Log:
    filename = "E://PJT/TEST2/" + filename
    print(filename)
    df=pd.read_csv(filename,header=None, sep = ";", error_bad_lines=False, encoding = "ISO-8859-1")
    dfList.append(df)
concatDf=pd.concat(dfList,axis=0)
concatDf.columns=colnames
concatDf.to_csv('Concat2.csv')

我在最后得到了一个连接文件,但是当我用 excel 打开它时,每一行我在每一行的第一个单元格中都有类似的内容: 1,1,13.05.2019,00:01:21,"18,16",°C,"12,00",°C,"1,00",Lux,0,37,%,487, ppm,0,"18,04",°C,"18,20",°C,"17,76",°C,"37,20",%,0,

Result of merging

但是工作表应该是这样的: Normal form of the sheet

【问题讨论】:

    标签: python python-3.x pandas csv concatenation


    【解决方案1】:

    您正在阅读多少个文件,您的代码是否适用于其他文件并且仅针对这个文件失败?或者这是您正在阅读的第一个文件并且它失败了?

    错误看起来很简单,代码无法找到文件。尝试在终端中单独加载文件,看看会发生什么。如果它不起作用,请提供文件的完整路径,然后读取它。确保文件名完全匹配,因为这些路径区分大小写。

    更新:

    for filename in L_LogClean:
        filename = complete_path_of_directory + filename
        print(filename)
        df=pd.read_csv(filename,header=None)
        dfList.append(df)
    

    更新 2:

    dfList=[]
    colnames=['No.','Date','Time','Temp1','Unit','Temps2','Unit','Lux2','Unit','BP1','Humidité relat','Unit','CO2','Unit','Présence','Temp1_EnO','Unit','Temp3_EnO','Unit','RH3_EnO','Unit','Chauffage']
    for filename in L_Log:
        filename = "E://PJT/TEST2/" + filename
        print(filename)
        df=pd.read_csv(filename,header=None, sep = ";", error_bad_lines=False, encoding = "ISO-8859-1")
        dfList.append(df)
    concatDf=pd.concat(dfList,axis=0)
    concatDf.columns=colnames
    concatDf.to_csv('Concat.csv')
    

    【讨论】:

    • 您的工作目录与文件目录不同。在代码中,将确切的工作目录附加到文件名
    • 我尝试了您的解决方案并得到了另一个错误,我在下面发布了修改后的 scrypt 和错误消息,因为我不知道如何评论您的答案。谢谢!
    • 检查 csv 文件中的值分隔符是什么。我认为这不是逗号。
    • 这是一个“;”我通过使用 Windows 的本机记事本打开我的 csv 文件找到了它
    • 我已经更新了答案。 read_csv 默认将分隔符设置为“,”。如果您的数据中有不同的分隔符,则需要使用 sep = 指定它
    猜你喜欢
    • 2015-10-02
    • 2019-07-23
    • 1970-01-01
    • 2020-12-30
    • 2020-06-16
    • 2022-01-01
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    相关资源
    最近更新 更多