gpt4 book ai didi

python - Pandas - 合并多个数据框

转载 作者:太空宇宙 更新时间:2023-11-04 10:33:40 25 4
gpt4 key购买 nike

这是一个多部分问题。我似乎无法将所有内容组合在一起。目标是创建一个我可以按如下方式访问的 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。 (连接 将 DataFrames 混合在一起,而 merging 根据公共(public)索引或列连接 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

关于python - Pandas - 合并多个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24853762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com