实际情况是,我有几个文件,其中包含具有多个字段的各种股票的time_series数据。每个文件都包含
time, open, high, low, close, volume目标是将所有这些都放入表单的一个数据帧中
field open high ...
security hk_1 hk_2 hk_3 ... hk_1 hk_2 hk_3 ... ...
time
t_1 open_1_1 open_2_1 open_3_1 ... high_1_1 high_2_1 high_3_1 ... ...
t_2 open_1_2 open_2_2 open_3_2 ... high_1_2 high_2_2 high_3_2 ... ...
... ... ... ... ... ... ... ... ... ...我创建了一个多索引
fields = ['time','open','high','low','close','volume','numEvents','value']
midx = pd.MultiIndex.from_product([security_name'], fields], names=['security', 'field'])首先,尝试将多索引应用于我从csv读取数据获得的数据帧(通过创建新的数据帧并添加索引)
for c in eqty_names_list:
midx = pd.MultiIndex.from_product([[c], fields], names=['security', 'field'])
df_temp = pd.read_csv('{}{}.csv'.format(path, c))
df_temp = pd.DataFrame(df_temp, columns=midx, index=df_temp['time'])
df_temp.df_name = c
all_dfs.append(df_temp)但是,新的数据帧只包含nan
security 1_HK
field time open high low close volume
time
NaN NaN NaN NaN NaN NaN NaN此外,它仍然包含一个时间列,尽管我尝试将其设置为索引(以便稍后可以通过索引连接其他股票的所有其他数据帧,以获得聚合的数据帧)。
如何在不丢失数据的情况下将多索引应用于数据帧,然后像下面这样连接数据帧
security 1_HK
field time open high low close volume
time创建类似的东西(注意,层次结构字段和安全性是互换的)
field time open high ...
security 1_HK 2_HK ... 1_HK 2_HK ... ...
time发布于 2016-08-09 19:54:02
我认为你可以首先让所有的文件列出列,然后通过列表理解获得所有的列,然后按列concat (axis=1)。如果添加参数keys,则会得到列中的Multiindex:
文件:
import pandas as pd
import glob
files = glob.glob('files/*.csv')
dfs = [pd.read_csv(fp) for fp in files]
eqty_names_list = ['hk1','hk2','hk3']
df = pd.concat(dfs, keys=eqty_names_list, axis=1)
print (df)
hk1 hk2 hk3
a b c a b c a b c
0 0 1 2 0 9 6 0 7 1
1 1 5 8 1 6 4 1 3 2最后需要swaplevel和sort_index
df.columns = df.columns.swaplevel(0,1)
df = df.sort_index(axis=1)
print (df)
a b c
hk1 hk2 hk3 hk1 hk2 hk3 hk1 hk2 hk3
0 0 0 0 1 9 7 2 6 1
1 1 1 1 5 6 3 8 4 2https://stackoverflow.com/questions/38849812
复制相似问题