使用DataFrames每天将数据记录到Excel

时间:2019-01-04 18:23:12

标签: excel database pandas dataframe python-3.5

早上好,现在我正在一个RPi项目中,该项目每秒捕获一些数据并将其转换为数字。我希望RPi将这个数字/时间数据保存到一个excel文件中,并且我也希望该文件可访问,并且该数据是“可绘制图形的”,具体取决于用户输入(即用户希望过去3天的数据>输出)过去3天的数据图表)。我知道这可以分为两部分:读取和保存data(1)以及pull和graph数据(2)。对于这个问题,我想重点讨论(1)。

为了从传感器读取数据并将其保存到充当数据库的excel文件中,我正在考虑使用pandas的DataFrame。为什么,你可能会问。我的代码基于前任留下的先前代码,并且已经具有类似的读/写代码。但是,规模差异很大(〜50个条目与〜38000个条目)。

我当时想将数据记录为:

Basic Text Sample Data in Excel

如您所见,如果每秒都有数据,那么最后一天我将有86400个条目。

现在写,我用于保存此数据的代码如下。我为要保存的数据创建了一个类,该类具有以下变量:

class ShiftDataSet:

def __init__(self):
    self.effDataList = []
    self.timeDataList = []
    self.dateTimeToday = datetime.datetime.now()
    self.date = self.dateTimeToday.strftime("%y%b%d")#str
    #%y is year without century, %b is month abbv, %d is day of month

然后将这些数据(尝试)记录到一个数据框中,然后记录到一个excel文件中,如下所示:

def saveToDf(self):
    dataToSave = {self.date : self.effDataList}
    #dictionary of data to save. effDataList is the list of 1's and 0's as read by the second.

    dfToSave = pd.DataFrame(dataToSave, index=self.timeDataList)
    #create DataFrame to save as Excel, using timeDataList as index. timeDataList is a str list of the second the recording is taken

    print("Attempting to save data")

    #code to combine dfToSave with old df record
    oldDf = pd.read_excel("/home/pi/Sensor/FS Days/Shift Record Template.xlsx")
    #oldDf is the database template, structured the same way like the "Data in Excel" image above

    result = dfToSave.combine_first(oldDf)
    #combine new dataframe of new data with template database

    writer = pd.ExcelWriter("/home/pi/Sensor/FS Days/Shift Record Template.xlsx")
    result.to_excel(writer, 'Sheet 1')

    writer.save()
    print("Save Complete")

    return

我根据前辈的代码对这种代码进行了建模,以进行较小规模的录音。但是,运行此代码,我遇到了数据无法正确写入excel文件的问题,最终结果如下: Messed Data

所以我的问题是:
1)如何将每秒获取的数据记录到正确的“秒”索引中?
2)每秒记录和保存数据,或者将其汇总到更大的列表中,然后白天保存一次或两次,会更好吗?
3)pandas DataFrame是我想要做的最好的解决方案,还是那里有更好的方法?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

1)就像为dfToSave定义索引一样,read_excel()时也必须这样做。

2)我猜这主要取决于您的硬件;没有任何背景信息,很难做出这样的判断。

3)我也会使用熊猫,但这并不意味着这是最好的方法。我猜你可以看看其他用于Python的excel库...