我想知道一只股票在宣布日期的价格。因此,我需要返回文件2中包含文件1中日期的行。
我不知道是否有可能这样做,因为文件是巨大的,或者是矮胖或熊猫是一个更好/更快的选择。
提前谢谢你的建议。
发布于 2016-08-07 13:56:53
这当然是在pandas
DataFrames
上执行的一项非常常见的任务。性能是否容易测试是一件容易的事情;如果我正确理解了您的问题,您只想在日期上合并,相应的pandas
部分将是以下内容(请注意,我将您的日期稍微更改了一点,以便有一个重要的重叠)。
In [1]: import pandas as pd
In [2]: prices = pd.read_csv('data_prices.csv', sep=';')
In [3]: ancment = pd.read_csv('data_static.csv', sep=';')
In [4]: combined = pd.merge(prices, ancment, left_on='ANNOUNCEMENT DATES', right_on='DATE')
In [5]: prices.head()
Out[5]:
ANNOUNCEMENT DATES TICKER
0 20151116 A UN EQUITY
1 20141117 A UN EQUITY
2 20131114 A UN EQUITY
In [6]: ancment.head()
Out[6]:
DATE TICKER PRICE
0 20151116 A UN EQUITY 41.81
1 20151230 A UN EQUITY 42.17
2 20151229 A UN EQUITY 42.36
In [7]: combined.head()
Out[7]:
ANNOUNCEMENT DATES TICKER_x DATE TICKER_y PRICE
0 20151116 A UN EQUITY 20151116 A UN EQUITY 41.81
合并这两个框架几乎可以完成您想要的-例如,您可能希望只有一个日期列,因为这些设置是一致的。有关可能性的全部集合,请参见http://pandas.pydata.org/pandas-docs/stable/merging.html。
发布于 2016-08-07 15:53:03
您可以像散列一样使用dictionaries
。
prices = "prices.csv"
ancment = "ancment.csv"
with open(ancment, 'rt') as a, open(prices, 'rt') as b:
reader1 = csv.reader(a, delimiter=';')
reader2 = csv.reader(b, delimiter=';')
dictionary = dict()
for row2 in reader2:
dictionary[row2[0]] = list()
for row1 in reader1:
try:
dictionary[row1[0]].append(row1)
except KeyError:
pass
for k,v in dictionary.iteritems():
print k,v
https://stackoverflow.com/questions/38814735
复制相似问题