过滤存储在csv文件中的数据

时间:2018-11-25 06:49:50

标签: python

我有一个csv文件,其中包含我的投资组合信息(即最近20年购买的股票的记录)。文件大约有数百万条记录。我想编写一个读取此文件并返回过滤数据的python函数。

csv文件中的字段:

Stock Quantity Price PurchaseDate 

查询能力示例:

  1. 能够查询在给定期间内进行的购买。
  2. 能够查询针对特定股票的购买。
  3. 查询数量大于50个单位的股票,价格小于50美元的股票等信息的查询能力。

问题:

  1. search_portfolio方法的签名如何?具体来说,用户将如何提供所有这些过滤信息?
  2. 应该使用哪种高效的数据结构从文件中读取和过滤此信息?我应该阅读这本Pandas DF还是使用类似Python dict的东西?为什么一个而不是另一个?
  3. 如果文件中的数据没有更改,我不想再次读取文件内容,我该如何记住这些数据?

通用API签名和实现思想非常受赞赏。

样本数据:

MSFT,50,100,23/02/2018
APPL,20,901,03/02/2010
AMZN,50,210,02/11/2005
MSFT,21,103,25/02/2015
MSFT,54,101,14/06/2014
AMZN,80,230,09/08/2009
MSFT,35,100,13/09/2007
GOOG,24,830,08/02/2006
MSFT,45,102,18/07/2007
GOOG,30,701,03/03/2006

1 个答案:

答案 0 :(得分:2)

首先,将csv中的数据读取到熊猫数据框。

import pandas as pd
# parse dates from column index 3: Purchasedate
df=pd.read_csv('file_name.csv', parse_dates=True, index_col=3)

现在,如果您要选择两个日期之间购买的股票

print(df.loc['2010-07-01' : '2010-10-02'])

类似地,如果您想要在特定日期之前/之后的数据,请使用

print(df.loc['2010-07-01' : ])   ## All records after given date
print(df.loc[ : '2010-10-02'])   ## All records before given date

如果要基于某些条件过滤记录,只需遍历整个数据框并使用条件语句对其进行过滤。

for index, row in df.iterrows():
if(row['Stock'] == 'MSFT'):
    print(row)

for index, row in df.iterrows():
if(row['Price'] > 100):
    print(row)

还有许多其他方法可以实现此目的。玩转它,您就会了解。