Python:将系列添加到数据框架中,并没有将数据放在正确的列中。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:将系列添加到数据框架中,并没有将数据放在正确的列中。相关的知识,希望对你有一定的参考价值。

超级长话短说! 我的输出csv文件的数据列数不对!

我每天有几百个文件要摄取,为了测试目的,我只用一个文件。为了测试目的,我只使用一个文件。

在每个文件中,我有多个功能。每个文件都是一个零件的尺寸检测,每个零件都有多个特征被检测。

我创建了空白的输出csv文件,标题为

我循环浏览每个文件

我继续下一个文件

除了在生成的csv文件中,每一步的数据都在正确的列下。该文件中的headers似乎是正确的,但data没有顺序,我不知道如何纠正。

#=========================================================================================
#Start of program Setup
#=========================================================================================
consolidatedHeaders = ['Part_Number', 'Inspection_Routine', 'Inspection_Machine', 'Serial_Number', 'Timestamp', 'Feature', 
                       'LTL', 'Nominal', 'UTL', 'Observation', 'Tool', 'Machine', 'Rework', 'manual_intervention']

#=========================================================================================
#Creating the Consolidated file
#For my testing purposes, this file will not exist and is created with every execution of code
#=========================================================================================

consolidatedFileName = consolidatedPath + '\' + YYYY + MM + '.csv'
    if not os.path.exists(consolidatedFileName): #Need to create a consolidated File
        with open(consolidatedFileName, 'w+') as c:
            c.seek(0)
            c.write(', '.join(consolidatedHeaders))
            c.write('
')
            #c.truncate()
            c.close
#=========================================================================================
#Bits of irrelevant code here finding files that are candidates for import and consolidation
#=========================================================================================


#=========================================================================================
#We've now found a file, lets go through it and add each feature and accompanying data
#to a dataframe
#=========================================================================================
df = pd.DataFrame()#consolidatedHeaders, header=0) # This will hold the ingested data, adding headers here caused problems downstream

for each do something: #not actually in code, just showing that this is a loop
#=========================================================================================
#Loop through every feature within the file and append their data to df
#=========================================================================================
    observationInfo={'Part_Number' : partNumber, 
                     'Inspection_Routine' : inspectionRoutine, 
                     'Inspection_Machine' : inspectionMachine, 
                     'Serial_Number' : serialNumber, 
                     'Timestamp' : creationDate, 
                     'Feature' : nrpSplit[0][1:], 
                     'Nominal' : nrpSplit[1].strip(), 
                     'UTL' : nrpSplit[2].strip(), 
                     'LTL' : nrpSplit[3].strip(), 
                     'Observation' : nrpLines[whileIndex + 1].strip(), 
                     'Tool' : plhFeatureDF.get_value(0, 15, takeable=True), 
                     'Machine' : plhFeatureDF.get_value(0, 16, takeable=True), 
                     'Rework' : plhFeatureDF.get_value(0, 17, takeable=True), 
                     'manual_intervention' : plhFeatureDF.get_value(0, 18, takeable=True) 
                     }
    df = df.append(observationInfo, ignore_index=True)
#=========================================================================================
#df is now complete with each feature from the prior loop
#The following 'print(df.head())' shows the data in the correct columns exactly as it
#should be in the output file
#=========================================================================================

print(df.head()) #this shows the data exactly the way it should be

#=========================================================================================
#add df with ingested data to our consolidated .csv file
#=========================================================================================

with open(consolidatedFile, 'a+') as consolidate:
    df.to_csv(consolidate, header=False, index=False)

#=========================================================================================
#Problem!! When opening the resulting .csv file, The data is all in the wrong columns. The 
#columns are not in the order of "consolidatedHeader" that i used to create the file or 
#in the order of df which is appended to the file.
#=========================================================================================
答案

我已经解决了这个问题。我需要改变

df = pd.DataFrame()#consolidatedHeaders, header=0)

df = pd.DataFrame(columns=consolidatedHeaders)

这样,即使数据框是空的,也能对它进行排序,这样,当我将系列数据追加到数据框时,数据就以正确的顺序追加了。

记录一下,在第一行(没有工作的那行),我最初尝试了。

df = pd.DataFrame(consolidatedHeaders, header=0)

也没有成功

以上是关于Python:将系列添加到数据框架中,并没有将数据放在正确的列中。的主要内容,如果未能解决你的问题,请参考以下文章

将 Python Pandas 数据框转换为 JSon 格式并通过使用 Python 添加其列名保存到 MongoDB 数据库中

将缺失的日期添加到 pandas 数据框

将新行添加到现有数据框/系列

熊猫(python):如何将列添加到数据框以进行索引?

使用变量从python添加新数据以访问数据库

Python爬虫之Scrapy框架系列——项目实战某瓣Top250电影所有信息的txt文本存储