我想在公告日期获得股票的价格。所以我需要返回文件2中包含文件1中日期的行。
20151229;联合国股权; 42.36 ...
data_prices = "data_prices.csv"
data_ancment = "data_static.csv"
with open(data_ancment, 'rt') as a, open(data_prices, 'rt') as b:
reader1 = csv.reader(a, delimiter=';')
reader2 = csv.reader(b, delimiter=';')
for row2 in reader2:
for row1 in reader1:
if row1[0] == row2[0]:
print(row2[2])
我不知道是否可以这样做,因为文件很大或者numpy或pandas是更好/更快的选项。
提前感谢任何提示。
答案 0 :(得分:0)
在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。
答案 1 :(得分:0)
您可以使用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