【问题标题】:Is pandas automatically adding a row and a columns in the first position?熊猫会自动在第一个位置添加一行和一列吗?
【发布时间】:2019-05-21 16:27:22
【问题描述】:

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

我在 python 3.7 中使用 pandas 并运行基于 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突出显示的是我所期望的:Picture

感谢您的帮助!

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

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)

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

【问题讨论】:

  • concatDf.to_csv('Concat2.csv', sep = ';',index=False)
  • 它帮助了我:我对自动添加到合并文件中的每个文件的列名有问题

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


【解决方案1】:

您需要将indexheader 都设置为None。 (在我看来并不完全直观,因为它应该是 indexcolumns,但你能做什么。)

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

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

【讨论】:

  • 我的列名确实在数据中
  • 您是否尝试使用header=0 而不是header=None 来读取您的csv 文件?假设您的列名是 csv 的第一行。
  • 是的,我做到了,它不再显示标题,但列是交替混合的(没有模式像第二列是第三位,第三列在第四位.. .) .例如,日期不是在第 2 列,而是在第 4 列。
  • 我不确定你是否理解我的意思。我更新了我的帖子,以展示如何处理重复的列名。
猜你喜欢
  • 2016-08-05
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 2022-11-07
  • 2019-08-01
  • 1970-01-01
  • 2019-11-23
相关资源
最近更新 更多