【发布时间】:2015-07-01 00:43:27
【问题描述】:
我目前在 python 中有一个问题,我不确定如何高效地解决。我有大量的时间序列数据被读入生成器。到现在为止,当我调用yield的时候,每一个数据都会一个一个的还给我。当每个时间序列具有相同的索引时,这一切都很好,每个时间序列都在同一日期开始并在同一日期结束。问题是当我有一组时间序列数据的开始日期不同但结束日期相同时。
当我查询时,最好的实现是什么,它将返回该特定日期的值。这样我就不必担心开始日期。它就像时间点。
我使用 pandas,目前不知道如何有效地实现这一点。
我用来逐个导入csv文件的代码:
def _open_convert_csv_files(self):
comb_index = None
for s in self.symbol_list:
print s
# Load the CSV file with no header information, indexed on date
self.symbol_data[s] = pd.io.parsers.read_csv(
os.path.join(self.csv_dir, '%s.csv' % s),
header=0, index_col=0, parse_dates=True,
names=['Date','Open','High','Low','Close','Total Volume']
).sort()
# Combine the index to pad forward values
if comb_index is None:
comb_index = self.symbol_data[s].index
else:
comb_index.union(self.symbol_data[s].index)
# Set the latest symbol_data to None
self.latest_symbol_data[s] = []
print ''
# Reindex the dataframes
for s in self.symbol_list:
self.symbol_data[s] = self.symbol_data[s].reindex(index=comb_index, method='pad').iterrows()
如您所见,self.symbol_data[s] 在时间序列具有相同的开始日期时工作正常,但当它们没有时,它将无法工作,因为在我的模拟过程中,我循环遍历循环中的每个符号以获取数据。另一个词我需要考虑每个迭代日期的横截面价格数据
很想听听其他人为实现这一目标所做的工作。
我知道我们可以将它们并排排列在一起,以便它们的日期匹配并逐行循环,但是当我有 100k 不同的证券时,这在记忆中很慢。另外,每个csv文件不是单列而是多列...
谢谢,
Date Open High Low Close Total Volume
19991118 29.69620186 32.63318885 26.10655108 28.71720619 685497
19991119 28.02375093 28.06454241 25.98417662 26.3513 166963
19991122 26.96317229 28.71720619 26.14734257 28.71720619 72092
19991123 27.73821052 28.47245727 26.10655108 26.10655108 65492
19991124 26.18813405 27.37108715 26.10655108 26.80000634 53081
19991126 26.67763189 27.08554675 26.59604891 26.88158932 18955
【问题讨论】:
-
你能发布一个csv文件的样本吗?另外,symbol_list 是文件的子集吗?
-
Symbol_list 是符号名称列表,即["SPY","GE"]
-
我不知道如何发布 csv 文件,它有 6 列,开盘价高低收盘价,数量和持仓量。索引列只是日期。不是盘中数据。
-
日期字段是什么样的?能给个样品吗? (例如 20150515 与 2015 年 5 月 5 日)
-
想一想,我的数据的面板表示是否有效?如果我有多个符号,我有多个代表每个符号的列。我的长轴是日期,我的短轴是开盘高低收盘数据。不确定熊猫中是否有面板数据的迭代.....