早上好,现在我正在一个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是我想要做的最好的解决方案,还是那里有更好的方法?
非常感谢您的帮助。
答案 0 :(得分:0)
1)就像为dfToSave
定义索引一样,read_excel()
时也必须这样做。
2)我猜这主要取决于您的硬件;没有任何背景信息,很难做出这样的判断。
3)我也会使用熊猫,但这并不意味着这是最好的方法。我猜你可以看看其他用于Python的excel库...