我希望有人可以提供一些帮助。我还有很多关于熊猫的知识,这是我第一次遇到这样的问题 - 处理大量数据。 RAM就成了一个问题。与我在网上找到的其他问题略有不同的是,其他人经常读取大型csv文件,而我读了相对较小的 csv,并从中创建了大量数据。
This is my code (html version of jupyter notebook).
我正在做的基础知识:
从5-ish开始,事情变得忙乱,因为我每个标签创建了31 557 600个数据点(并且大约有23个标签)。
拜托,你能帮我处理一下吗?
我创建了一个最小的例子。 Jupyter notebook file here,下面的代码相同。
我的问题是:一个人如何处理这么大量的数据,因为随着你增加标签数量或数据分辨率,它会很快失控?因为我的电脑用光了具有16GB内存的RAM(嗯,不是这个确切的例子 - 这个更小,有一个工作示例显示我想要做什么)。 应该如何处理这样的数据,因为它是那么多?我不知道itterrows是否会运行良好,因为我正在插值以填充值。
import pandas as pd
import numpy as np
# random timestamp from https://stackoverflow.com/questions/553303/generate-a-random-date-between-two-other-dates
def random_date(start, end, position=None):
start, end = pd.Timestamp(start), pd.Timestamp(end)
delta = (end - start).total_seconds()
if position is None:
offset = np.random.uniform(0., delta)
else:
offset = position * delta
offset = pd.offsets.Second(offset)
t = start + offset
return t
#build dummy df
df = pd.DataFrame(np.random.rand(200), columns=['Value'])
df['TagName'] = ''
df.loc[df.index <= 100, 'TagName'] = 'Tag A'
df.loc[df.index > 100, 'TagName'] = 'Tag B'
df['DateTime'] = [random_date(start="2016-01-01 00:00:00", end="2016-03-31 23:59:59") for i in range(df.shape[0])]
df.loc[df['TagName'] == 'Tag A', 'DateTime'] = sorted(df[df['TagName'] == 'Tag A']['DateTime'].values)
df.loc[df['TagName'] == 'Tag B', 'DateTime'] = sorted(df[df['TagName'] == 'Tag B']['DateTime'].values)
#actual processing
# final lists for appending to one big df
# because it's better to create from lists
# than appending in a loop
tagname_list = []
value_list = []
datetime_list = []
groups = df.groupby('TagName')
for tag, d in groups:
# interpolate continous data tags
resampled = d.set_index('DateTime').asfreq('S')
filled = resampled.interpolate('pchip')
#pd.concat([output, filled['Value']])
tagname_list.extend(len(filled) * [tag])
value_list.extend(filled['Value'].values)
datetime_list.extend(filled.index)
del df
this_is_what_im_after = pd.DataFrame({'TagName': tagname_list, 'Value': value_list, 'DateTime': datetime_list}).pivot_table(values='Value', index='DateTime', columns='TagName')