excel - 使用 DataFrames 每天将数据记录到 Excel 中
问题描述
早上好,现在我正在做一个 RPi 项目,该项目每秒捕获一些数据并将其转换为数字。我希望 RPi 将此数字/时间数据保存到一个 excel 文件中,并且我还希望该文件可以访问,数据可以根据用户输入“图形化”(即用户想要过去 3 天的数据>输出过去 3 天的数据图表)。我知道这可以分为两部分:读取和保存数据(1)和拉取和绘制数据(2)。对于这个问题,我想重点关注(1)。
为了从传感器读取数据并将其保存到充当数据库的 excel 文件中,我正在考虑使用 pandas 的 DataFrame。为什么,你可能会问。我的代码基于前任留下的先前代码,并且它已经具有类似的读/写代码。然而,规模有很大不同(约 50 个条目与约 38000 个条目)。
我正在考虑将数据记录为:
如您所见,如果每一秒都有数据,那么一天我会得到 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)就像您为 定义索引一样dfToSave
,您必须在read_excel()
.
2)我猜这主要取决于您的硬件;没有任何背景信息很难做出这个判断。
3)我也会使用熊猫,但这并不意味着它是最好的方法。我猜你可以看看 Python 的其他 excel 库......
推荐阅读
- android - 使用 Firestore 按键入的字母搜索
- google-cloud-platform - Google Cloud - 从不同的电子邮件地址使用了错误的项目 ID
- paypal - IPN 模拟器说接受,但验证总是返回“无效”
- c# - 在使用内存流作为 TiffBitmap 解码器的输入时需要帮助
- awk - 如何匹配 2 个文件并导出到输出?
- node.js - 将 process.env 转换为
与 TS - javascript - 变量范围问题(nodejs/javascript)
- raku - 如何计算模块的 dist 哈希
- lisp - Lisp - 如何在另一个函数中调用一个函数?
- python - 在 Linux 上自动安装 conda