制作DataFrame的子集

时间:2017-09-24 21:44:37

标签: python pandas dataframe

要构建一个算法,我想让python脚本以一种不需要一次又一次地使用Panda的read_csv函数的方式工作。

以下是我正在使用的代码。

start_date = '2016-06-01'
end_date = '2017-09-22'

#Pool of symbols that I want to use
usesymbols = ['GLAXO', 'AVN']

#Function to build a dataframe 
def data(symbols):
    dates=pd.date_range(start_date,end_date) 
    df=pd.DataFrame(index=dates)
    for symbol in symbols:
        df_temp=pd.read_csv('/home/furqan/Desktop/python_data/{}.csv'.format(str(symbol)),usecols=['Date','Close'],
                            parse_dates=True,index_col='Date',na_values=['nan'])
        df_temp = df_temp.rename(columns={'Close': symbol})
        df=df.join(df_temp)
        df=df.fillna(method='ffill')
        df=df.fillna(method='bfill')
    return df

#Function to build powerset from list of "usesymbols"
def powerset(iterable):
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(1, len(s)+1))

power_set = list(powerset(usesymbols))
dataframe = data(usesymbols)
print(dataframe)
for j in range(0, len(power_set)):

首先使用usesymbols,我发现了一个如下所示的电源组:

[('GLAXO',), ('AVN',), ('GLAXO', 'AVN')]

然后我创建了一个如下所示的数据框:

             GLAXO    AVN
2016-06-01  205.93  31.42
2016-06-02  206.22  32.62
2016-06-03  207.86  31.65
2016-06-04  207.86  31.65
2016-06-05  207.86  31.65

之后我添加了一个循环,在该循环下我想创建一个临时数据帧,如果j = 0,临时数据帧应该包含1列,即GLAXO,那么当j = 1时,它应该包含一列&# 39; AVN'最后,当j = 3时,它应该包括两列' AVN'和' GLAXO'。

我很难制作临时数据帧。第二种选择是利用数据功能,但最终每次都会使用pandas read_csv函数。

1 个答案:

答案 0 :(得分:1)

powerset = [('GLAXO'), ('AVN'), ('GLAXO', 'AVN')]
j = 1
print(df.loc[:,powerset[j]])

2016-06-01    31.42
2016-06-02    32.62
2016-06-03    31.65
2016-06-04    31.65
2016-06-05    31.65
Name: AVN, dtype: float64

j=2
print(df.loc[:,powerset[j]])

 GLAXO    AVN
2016-06-01  205.93  31.42
2016-06-02  206.22  32.62
2016-06-03  207.86  31.65
2016-06-04  207.86  31.65
2016-06-05  207.86  31.65