在 for 循环中创建和命名熊猫系列
Posted
技术标签:
【中文标题】在 for 循环中创建和命名熊猫系列【英文标题】:creating and naming pandas series in for loop 【发布时间】:2018-03-21 22:32:55 【问题描述】:目标:将一个包含 N 个整数的列表传递给一个函数,并将这些整数用于 1)。在 pandas 数据框中创建并命名 N 列; 2)。使用这些整数作为回溯期计算滚动平均值。
这里是函数的代码(为了重现性而拉取数据):
import pandas as pd
import pandas_datareader as web
test_df = web.DataReader('GDP', data_source = 'fred')
def sma(df, sma_lookbacks = [1,2]):
import pandas as pd
df = pd.DataFrame(df)
df = df.dropna()
for lookback in sma_lookbacks:
df[str('SMA' + str(lookback))] = df.rolling(window = lookback).mean()
return df.tail()
sma(test_df)
收到错误:
ValueError: 传递的项目数错误 2,位置暗示 1
我这里有逻辑问题吗?我相信在 for 循环中它应该不是一次按顺序传递整数,所以我不太明白它是如何一次传递多个值的。因此,我不确定如何进行故障排除。
根据这篇文章,当您同时将多个值传递给只能接受一个值的容器时,会引发此错误。 for 循环不应该解决这个问题吗? ValueError: Wrong number of items passed - Meaning and suggestions?
【问题讨论】:
【参考方案1】:我认为 pandas 在分配从应用于数据框的函数返回的值之前会搜索列名。因此,在将函数返回的序列分配给该列之前,先用一些标量初始化该列,即
import pandas as pd
import pandas_datareader as web
test_df = web.DataReader('GDP', data_source = 'fred')
def sma(df, sma_lookbacks = [1,2]):
df = pd.DataFrame(df)
df = df.dropna()
for lookback in sma_lookbacks:
df[str('SMA' + str(lookback))] = 0
df[str('SMA' + str(lookback))] = df.rolling(window = lookback).mean()
return df.tail()
国内生产总值 SMA1 SMA2
日期
2016-04-01 18538.0 18538.0 18431.60
2016-07-01 18729.1 18729.1 18633.55
2016-10-01 18905.5 18905.5 18817.30
2017-01-01 19057.7 19057.7 18981.60
2017-04-01 19250.0 19250.0 19153.85
【讨论】:
以上是关于在 for 循环中创建和命名熊猫系列的主要内容,如果未能解决你的问题,请参考以下文章