2016-08-07 29 views
0

我想在公告日獲得股票的價格。所以,我需要返回一個包含文件1.Python - 在2個不同的csv/txt文件中比較2列並找到匹配

  • 我有超過1000股票價格
    • 文件1「公告日期」兩個CSV文件中包含日期在文件2行:
    • 公告日期; TICKER
    • 20151116; A聯合國股權
    • 20141117; A聯合國股權
    • 20131114; A聯合國股權 ...

  • 文件2 '價格' 包含每個股票每天的交易價格自2005年:
  • 在1mio。線
  • 日期; TICKER;價格
  • 20151231; A UN公平; 41.81
  • 20151230; A UN公平; 42.17
  • 20151229; A UN公平; 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

pandasDataFrames上執行它當然是一項非常普遍的任務。性能是否容易是你可以隨時測試的東西;如果我正確理解你的問題,你只想在日期合併,相應的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以獲取完整的可能性。

+0

我認爲它應該是:'pd.merge(價格,ancment,left_on = [ 'TICKER', '公佈DATES'],right_on = [ 'TICKER', '日期'])'因爲將最有可能的數據爲兩個文件中的多個代號... – MaxU

+0

@MaxU:我會假設,但給定OP中的代碼片段,看起來不像他們要做什麼。 – fuglede

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 
相關問題