簡體   English   中英

熊貓-合並多個DataFrames

[英]pandas - merging multiple DataFrames

這是一個多部分的問題。 我似乎無法將所有內容結合在一起。 目標是創建一個我可以訪問的DataFrame(使用MultiIndex進行猜測),如下所示:

ticker = 'GOLD'
date = pd.to_datetime('1978/03/31')
current_bar = df.ix[ticker].ix[date]

然后我可以說:current_bar.Last嗎?

無論如何,這是文件,以及我如何加載它們。

In [108]: df = pd.read_csv('GOLD.csv', parse_dates='Date', index_col='Date')
In [109]: df
Out[109]: 
            Exp       Last     Volume
Date
1978-03-30  198002    995.6    54
1978-03-31  198002    999.5    78

In [110]: df2 = pd.read_csv('SPX.csv', parse_dates='Date', index_col='Date')
In [111]: df2
Out[111]: 
            Exp       Last     Volume
Date
1978-03-30  198003    215.5    25
1978-03-31  198003    214.1    99

理想情況下,我希望它看起來像這樣(我認為):

ticker      GOLD                            SPX
values      Exp       Last     Volume       Exp       Last     Volume
Date
1978-03-30  198002    995.6    54           198003    215.5    25
1978-03-31  198002    999.5    78           198003    214.1    99
  1. 我想我的問題是:
    • 我如何進行分層(每個文件的實際數據有20多個相同的列)
    • 然后如何合並文件(我需要將大約100個文件全部放入1個DataFrame中)
    • 我的假設是正確的,然后我可以做:current_bar.Last獲取值?

非常感謝。

您可以使用pd.concat 串聯 DataFrame。 串聯 smushes DataFrames在一起,而合並加入基於共同的指數或列DataFrames)。 提供keys參數時,您將獲得一個層次結構索引:

import pandas as pd
df = pd.read_csv('GOLD.csv', parse_dates='Date', index_col='Date', sep='\s+')
df2 = pd.read_csv('SPX.csv', parse_dates='Date', index_col='Date', sep='\s+')
result = pd.concat([df, df2], keys=['GOLD', 'SPX'], names=['ticker']).unstack('ticker')
result = result.reorder_levels([1, 0], axis=1).sortlevel(level=0, axis=1)
print(result)

產量

ticker        GOLD                    SPX               
               Exp   Last  Volume     Exp   Last  Volume
Date                                                    
1978-03-30  198002  995.6      54  198003  215.5      25
1978-03-31  198002  999.5      78  198003  214.1      99

result['Last']產生DataFrame:

In [147]: result['Last']
Out[147]: 
ticker       GOLD    SPX
Date                    
1978-03-30  995.6  215.5
1978-03-31  999.5  214.1

我建議避免語法result.Last ,因為它太靠近result.last ,它返回一個數據幀的方法。


要處理更多文件,您可以使用如下代碼:

import pandas as pd
dfs = list()
for filename in filenames:
    df = pd.read_csv(filename, parse_dates='Date', index_col='Date')
    # compute moving_mean
    dfs.append(df)

keys = [filename[:-4] for filename in filenames]
result = pd.concat(dfs, keys=keys, names=['ticker']).unstack('ticker')

請注意,這確實需要足夠的內存來保存內存中所有DataFrame的列表,再加上足夠的內存來保存result

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM