我是Python的新手,我必须分析一个大型数据集,其中包含Excel格式的原始sensordata。
每个研究参与者的每个Excel数据文件都大于100 MB。 excelfile包含5张纸,用于测量5种不同的生理参数。每张纸包含超过一百万行和两列(时间,生理参数)。
在一百万行传感器数据之后,数据将自动在Excel文件的以下列(C和D)中继续。
每次我尝试在Python中加载数据文件时,它都会花费很长时间。我想知道几件事:
1)如何告诉Python从特定的 Excel工作表中读取数据?花这么长时间是正常的吗?
这是我尝试过的:
df = pd.read_excel("filepath", sheet_name="Sheetname")
print (df.head (5))
2)使用Pandas在Python中对此大型数据文件进行数据处理是否可行?我尝试这样做是为了加快流程:
import xlrd
work_book = xlrd.open_workbook('filepath', on_demand=True)
work_book.release_resources()
3)稍后:我想比较不同研究参与者的生理参数。由于这是研究参与者之间的时间序列分析,因此我如何开始使用Python进行此操作?
几天后,我已经学习了Python的基础知识,并且到目前为止,我还是很喜欢它。我意识到我还有很长的路要走。
更新:我想我已经完成了时间序列分析(实际上只是趋势分析,使用Dickey-Fuller检验和滚动平均可视化技术)! :D非常感谢大家的帮助!!!熊猫中的“ datetime”模块对我来说是最难解决的,我的datetime列仍被识别为“ object”。这正常吗?应该不是datetime64吗?
答案 0 :(得分:2)
IIUC,这听起来好像您不需要不断地从不断变化的Excel工作表中读取数据。我建议您先阅读一下Excel工作表,然后使用pandas
将它们存储在序列化的to_pickle()
数据框中:
import pandas as pd
participants = ['P1','P2','P3']
physios = ['Ph1','Ph2','Ph3','Ph4','Ph5']
for p in participants:
for ph in physios:
df = pd.read_excel(p + r'.xlsx', sheet_name=ph)
df.to_pickle(p + '_' + ph + r'.pkl')
由于您不必承担所有Excel开销,因此您现在可以更高效地读取这些腌制的数据帧。 here可以进行很好的讨论。
答案 1 :(得分:1)
您描述的数据集听起来像是dask
项目所针对的问题。它使您可以在内存不足的情况下并行使用大多数标准pandas
命令。
唯一的问题是,dask没有据我所知的Excel阅读器。由于您的问题表明数据不适合内存...您可能想在excel中将数据手动转换为csv,那么您可以简单地进行以下操作:
# After pip install dask
import dask.dataframe as dd
df = dd.read_csv("./relpath/to/csvs/*.csv")
# Do data munging here
df.compute()
如果这不起作用,那么最好尝试将数据加载到spark或数据库中并在那里进行转换。
回复:关于时间序列的问题,请先阅读有关here主题的文档。