首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python -比较2个不同csv/txt文件中的2列并查找匹配

Python -比较2个不同csv/txt文件中的2列并查找匹配
EN

Stack Overflow用户
提问于 2016-08-07 13:45:10
回答 2查看 1.6K关注 0票数 0

我想知道一只股票在宣布日期的价格。因此,我需要返回文件2中包含文件1中日期的行。

  • 我有两个csv文件,有1000多个股票价格
    • 文件1“公告日期”包含:
    • 公告日期
    • 20151116;联合国股本
    • 20141117;联合国股本
    • 20131114;联合国股权.

  • 文件2“价格”包含自2005年以来每只股票的每个交易日的价格:
  • 一百多万。线条
  • 日期;日期;价格
  • 20151231;A联合国股本;41.81
  • 20151230;A联合国股本;42.17
  • 20151229;联合国股本;42.36. data_prices = "data_prices.csv“data_ancment = "data_static.csv”,其中open(data_ancment,'rt')为a,open(data_prices,'rt')为b: reader1 = csv.reader(a,分隔符=‘;’) reader2 = csv.reader(b,分隔符=‘;’)用于row2 ( reader2: row1 in reader1: if row1 ==:print(row1==))

我不知道是否有可能这样做,因为文件是巨大的,或者是矮胖或熊猫是一个更好/更快的选择。

提前谢谢你的建议。

EN

回答 2

Stack Overflow用户

发布于 2016-08-07 13:56:53

这当然是在pandas DataFrames上执行的一项非常常见的任务。性能是否容易测试是一件容易的事情;如果我正确理解了您的问题,您只想在日期上合并,相应的pandas部分将是以下内容(请注意,我将您的日期稍微更改了一点,以便有一个重要的重叠)。

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2016-08-07 15:53:03

您可以像散列一样使用dictionaries

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38814735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档