首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组织多个数据格式的最佳方法

组织多个数据格式的最佳方法
EN

Stack Overflow用户
提问于 2019-05-06 16:09:50
回答 1查看 1.7K关注 0票数 2

我对python很陌生,并试图学习如何使用dataframes。我读到使用股票数据是一个很好的项目来掌握他们。

所以我发现了一些从1990年到2010年的每日股票数据。每只股票有5列,

日期,开放价格,高价格,低价和收盘价

因此,我正在努力解决什么是最好的方式来组织数据。

假设我有多只股票的数据。最好是将它们合并成一个大的数据帧,还是将数据文件堆在一起呢?还是我错过了另一种方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-06 17:23:04

假设您有三个股票,名为S1S2S3,并且已经有了每个股票的数据框架:

代码语言:javascript
复制
import pandas as pd

## create some fake data in format described by OP... 
stock_names = ['S1', 'S2', 'S3']

df1 = pd.DataFrame({
  'date': ['2019-05-05', '2019-05-06'],
  'openp': [100, 110], 'highp': [115, 120], 
  'lowp': [100, 105], 'closep': [110, 120]
})
df2 = pd.DataFrame({
  'date': ['2019-05-05', '2019-05-06'],
  'openp': [110, 120], 'highp': [125, 130], 
  'lowp': [110, 115], 'closep': [120, 130]
})
df3 = pd.DataFrame({
  'date': ['2019-05-05', '2019-05-06'],
  'openp': [120, 130], 'highp': [135, 140], 
  'lowp': [120, 125], 'closep': [130, 140]
})

这里有几种存储数据的方法(包括OP提到的两种)。

代码语言:javascript
复制
## scenario 1: store the dfs in a list that you can iterate over 
##             (can only access stocks by index, not name) 
df_list = [df1, df2, df3]


## scenario 2: dict of data frames -- just a better version of scenario 1 
##             (access a stock by its name, e.g. `df_dict['S1']`) 
df_dict = dict(zip(stock_names, [df1, df2, df3]))


## scenario 3: single data frame, with 'stock' field to track where rows came from. 
##             (nice bc you can do grouped aggregations easily)
stacked_df = pd.concat(
  [df.assign(stock = stock) for df, stock in zip(df_list, stock_names)])

在我的经验中,场景3通常是(但不是总是!)最好使用它,因为它可以很好地处理pd.DataFrame.groupby()pd.DataFrame.aggregate()方法。在交互式shell中进行探索性数据分析非常方便(也请参阅熊猫拆分-申请-组合用户指南)。

下面是一个例子,说明为什么场景3可以很好地同时计算股票的平均开盘价和收盘价(当然可以在其他情况下完成,只是不使用这种按组聚合的链)。

代码语言:javascript
复制
(stacked_df
  .groupby(['stock'])
  .aggregate({'openp': pd.np.mean, 'closep': pd.np.mean}))

##        openp  closep
## stock       
## S1       105     115
## S2       115     125
## S3       125     135

您也可以使用其他感兴趣的聚合函数按多列进行分组,也可以按日期等分组。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56008838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档