[英]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.