Python比较两个不同csv/txt文件中的2列并找到匹配项

2024-05-23 15:47:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道股票在宣布日的价格。所以我需要返回文件2中包含文件1中日期的行。在

  • 我有两个超过1000个股票价格的csv文件
    • 文件1“公告日期”包含:
    • 公告日期
    • 联合国股票
    • 20141117;联合国股票
    • 20131114;联合国股票 ... 在

  • 文件2“价格”包含自2005年以来每只股票每个交易日的价格:
  • 超过一百万。行
  • 日期;股票;价格
  • 20151231;联合国权益;41.81
  • 20151230;联合国股本;42.17
  • 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或熊猫是一个更好/更快的选择。在

提前感谢您的任何提示。在


Tags: 文件csvdataas价格open公告reader
2条回答

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以获取完整的可能性集合。在

您可以使用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

相关问题 更多 >