首页 > 解决方案 > 熊猫会自动在第一个位置添加一行和一列吗?

问题描述

我正在使用 pandas 来合并一些 csv 文件(csv 文件的数量范围可能会有所不同)。当我运行脚本时,似乎自动添加了一列和一行(如下图所示)。

我将 pandas 与 python 3.7 一起使用并运行基于 Windows 操作系统的计算机。我使用 Excel 打开 csv 文件。

这是代码:

import os
import pandas as pd

L_Log= os.listdir('E://PJT/TEST2/')


dfList=[]
for filename in L_Log:
    filename = "E://PJT/TEST2/" + filename
    typefile=type(filename)
    print = typefile
    print(filename)
    df=pd.read_csv(filename,header=None, sep = ';', error_bad_lines=False, encoding="ANSI")
    #df[1:] = [test[1:] for test in df[1:]]
    dfList.append(df)
concatDf=pd.concat(dfList,axis=0)
concatDf.to_csv('Concat2.csv', sep = ';')

我得到的结果如图所示,用excel突出显示的是我所期望的:图片

谢谢你的帮助 !

更新:我稍微更改了代码:我在添加列标题时删除了该部分,并添加了一个

concatDf.to_csv('Concat2.csv', sep = ';',index=False)

这是完整的新脚本:

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','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
    typefile=type(filename)
    print = typefile
    print(filename)
    df=pd.read_csv(filename,header=None, sep = ';', error_bad_lines=False, encoding="ANSI")
    #df[1:] = [test[1:] for test in df[1:]]
    dfList.append(df)
concatDf=pd.concat(dfList,axis=0)
#concatDf.columns=colnames
concatDf.to_csv('Concat2.csv', sep = ';',index=False)

现在文件看起来是正确的,但是:它为每个文件添加了列的名称(显然我希望第一行显示列的标题)这是我得到的一个例子:我得到了什么 谢谢!

标签: pythonpython-3.xpandascsvconcatenation

解决方案


您需要同时设置indexheaderNone。(在我看来并不完全直观,但应该如此,indexcolumns你能做什么。)

为防止您的列名在数据中重复,您需要将 csv 文件中的列名设置为数据框中的列名。您需要header在您正在读取 csv 文件的 for 循环中编辑参数read_csv

for filename in L_Log:
    ...
    df=pd.read_csv(filename,header=0, ...)
    ...

推荐阅读