[英]DataFrame of DataFrames in Python (Pandas)
这里的想法是,每年,我能够创建三个数据框(df1,df2,df3),每个数据框包含不同的公司和股票价格('公司'和'价格'是df1~df3中的两列)。 我想使用另一个数据帧(下面命名为“store”)来存储每年的三个数据帧。
这是我的代码:
store = pd.DataFrame(list(range(1967,2014)), columns=['year'])
for year in range(1967,2014):
....some codes that allow me to generate df1, df2 and df3 correctly...
store.loc[store['year']==year, 'df1']=df1
store.loc[store['year']==year, 'df2']=df2
store.loc[store['year']==year, 'df3']=df3
我没有收到错误警告或此代码后的任何内容。 但在“商店”数据框中,列'df1','df2'和'df3'都是'NAN'值。
我认为大熊猫提供了更好的替代方案(你的建议如下)。
首先,有pandas.Panel
数据结构,它适用于你在这里做的事情。
然而,正如Wes McKinney(熊猫作者)在他的“ 数据分析Python:与熊猫,NumPy和IPython的数据争夺”一书中指出的那样,多维指数在很大程度上提供了更好的选择。
考虑以下代码替代方法:
dfs = []
for year in range(1967,2014):
....some codes that allow me to generate df1, df2 and df3
df1['year'] = year
df1['origin'] = 'df1'
df2['year'] = year
df2['origin'] = 'df2'
df3['year'] = year
df3['origin'] = 'df3'
dfs.extend([df1, df2, df3])
df = pd.concat(dfs)
这为您提供了一个包含4列的DataFrame: 'firm'
, 'price'
, 'year'
和'origin'
。
这使您可以灵活地:
按照'year'
和'origin'
等级组织: df.set_index(['year', 'origin'])
,比如'origin'
和'price'
: df.set_index(['origin', 'price'])
根据不同的级别进行groupby
通常,以许多不同的方式对数据进行切片和切块。
你在这个问题中提出的建议使得一个维度(起源)任意地不同,并且很难想到它的优势。 如果由于某些维度的分割是必要的,例如性能,您可以将DataFrames与标准Python数据结构更好地结合起来:
每年将字典映射到具有其他三个维度的Dataframe。
三个DataFrame,每个原点一个,每个都有三个维度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.