pandas-合并多个DataFrames[英] pandas - merging multiple DataFrames

本文是小编为大家收集整理的关于pandas-合并多个DataFrames的处理方法,想解了pandas-合并多个DataFrames的问题怎么解决?pandas-合并多个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 来连接 DataFrames.(Concatenating 将 DataFrames 混合在一起,而 merging 基于公共索引或列连接 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,因为它太接近返回 DataFrame 方法的 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.

本文地址:https://www.itbaoku.cn/post/1727745.html