Pandas Dataframes 的 Python 字典 - 迭代和调用
Posted
技术标签:
【中文标题】Pandas Dataframes 的 Python 字典 - 迭代和调用【英文标题】:Python Dictionary of Pandas Dataframes - Iterating and Calling 【发布时间】:2019-08-20 05:25:59 【问题描述】:我正在尝试编写一个程序,用户输入多个股票代码,这些代码将(最终)绘制成图表。
import pandas as pd
import pandas_datareader.data as web
from datetime import datetime, timedelta
tickers = ['QQQ', 'SQQQ', 'RYCVX', 'RYCWX']
days = (datetime.now() - timedelta(5)).strftime('%Y-%m-%d')
data =
for t in tickers:
data[t] = web.DataReader (t, 'yahoo', days, end = None)
结果:
'QQQ': High Low ... Volume Adj Close
Date ...
2019-08-14 185.949997 182.419998 ... 51000500 182.759995
2019-08-15 183.589996 181.160004 ... 36685000 182.550003
2019-08-16 185.949997 184.100006 ... 32781400 185.479996
2019-08-19 188.830002 187.500000 ... 22494100 188.429993
[4 rows x 6 columns],
'SQQQ': High Low Open Close Volume Adj Close
Date
2019-08-14 36.900002 35.000000 35.320000 36.730000 32427000 36.730000
2019-08-15 37.689999 36.230000 36.520000 36.849998 19184200 36.849998
2019-08-16 35.939999 34.830002 35.939999 35.110001 14002600 35.110001
2019-08-19 33.970001 33.220001 33.590000 33.529999 11745300 33.529999,
'RYCVX': High Low Open Close Volume Adj Close
Date
2019-08-14 89.489998 89.489998 89.489998 89.489998 0 89.489998
2019-08-15 90.290001 90.290001 90.290001 90.290001 0 90.290001
2019-08-16 92.489998 92.489998 92.489998 92.489998 0 92.489998
2019-08-19 94.290001 94.290001 94.290001 94.290001 0 94.290001,
'RYCWX': High Low Open Close Volume Adj Close
Date
2019-08-14 9.92 9.92 9.92 9.92 0 9.92
2019-08-15 9.83 9.83 9.83 9.83 0 9.83
2019-08-16 9.59 9.59 9.59 9.59 0 9.59
2019-08-19 9.40 9.40 9.40 9.40 0 9.40
这将创建一个字典,其中股票代码是键,股票数据是值。我最初的想法是删除键:值对并分配给一个变量,但我刚刚了解到我最初的想法是不好的做法。我现在需要知道如何做的是:
-
我需要能够从特定键调用列值,例如键 QQQ 的“高”列。如果将列分配给变量,我通常会如何调用它:
QQQ["High"]
-
我需要一个循环来为每个数据帧迭代一个新列。如果将 df 分配给变量以创建新列,我会怎么做:
QQQ['15MA'] = QQQ['Close'].rolling(15).mean()
如何使调用和迭代适应字典?
【问题讨论】:
pop()
方法从字典中移除指定项并返回移除的值
是的,这就是重点。我想要一个函数来按键从字典中删除数据并将其分配给变量
动态创建变量不是最佳实践。为什么要创建变量,为什么不能使用字典键作为参考?为什么不能使用 get() 方法来获取 key 的值,而不是使用 pop 删除项目?
【参考方案1】:
首先使用函数外循环填充字典:
for t in tickers:
data[t] = web.DataReader (t, 'yahoo', days, end = None)
datapop(t)
我认为您需要更改datapop
以通过[]
中的键进行选择:
def datapop(ticker):
return data[ticker]
或者通过函数get
,这更通用,因为如果没有找到key
,可能会设置默认值:
def datapop(ticker):
return data.get(ticker)
原因是pop
方法未选择,而是用于字典中的remove keys。
【讨论】:
for 循环自动将数据添加到字典中。不需要使用循环外的单独函数来填充字典。 “datapop”功能的重点是从字典中弹出数据并将 pandas df 分配给一个变量。请重新阅读我的原始帖子,如果您有任何问题或者我需要重新编写问题,请告诉我。 @dancassin - 但是为什么呢?分配给变量的原因是什么?因为不是recommended,所以这里最好用字典来存储DataFrames。 啊,谢谢你的链接。非常有帮助。也许我应该完全重写我的问题,因为这不仅是不好的做法,而且显然是重复的。 @dancassin - 是的,这取决于你,但我认为 DataFrames 的字典或带有df_big = pd.concat(df)
的大 DataFrame 在这里更好。
原问题已修改以上是关于Pandas Dataframes 的 Python 字典 - 迭代和调用的主要内容,如果未能解决你的问题,请参考以下文章
Pandas:在具有不同名称的字段上加入 DataFrames?
Python中DataFrames的DataFrame(Pandas)
python Pandas - 过滤DataFrames和Series