【问题标题】:ValueError: Wrong number of items passed X, placement implies YValueError:通过 X 的项目数量错误,位置暗示 Y
【发布时间】:2021-12-12 09:20:21
【问题描述】:

我有一个从 1967 年到现在的时间序列日期框架,它为我提供了给定股票的调整后收盘价。我只对 2020 年 1 月 1 日至今年 5 月的价格感兴趣,所以我使用 .loc 对其进行了切片。我想在此期间将这些价格标准化,因此我使用以下公式来实现这一点:

import pandas as pd
import numpy as np

df = pd.read_csv('filename.csv')
df.loc['2020-01-01':]
df

Date             Ticker         Adj Close
2020-01-02         ABC              X1
2020-01-03         ABC              X2
2020-01-04         ABC              X3
2020-01-05         ABC              X4
2020-01-06         ABC              X5
    ...            ...              ...
2021-05-28         ABC              X355

def normalized(series):
    minimum = df['Adj Close'].min()
    maximum = df['Adj Close'].max()
    return ((df['Adj Close'] - minimum) / (maximum - minimum))

df['Prices Normalized'] = df['Adj Close'].transform(normalized)

当我运行它时,我得到ValueError: Wrong number of items passed 355, placement implies 1

我的目标是创建一个具有标准化价格的新列,但似乎无法弄清楚为什么会出现此错误。提前感谢您的帮助!

【问题讨论】:

  • df['Prices Normalized'] = normalize(pd.Series())。看起来 series 在你的 normalized 函数中没有做任何事情。

标签: python pandas dataframe numpy valueerror


【解决方案1】:

试试管道。您收到此错误的原因是转换适用于系列元素。因此,您返回了 355 个项目,并且您尝试将其放入一列中。通过使用 apply,您正在为整个系列做准备。

def normalized(series):
    minimum = df['Adj Close'].min()
    maximum = df['Adj Close'].max()
    return ((df['Adj Close'] - minimum) / (maximum - minimum))

df['Prices Normalized'] = df['Adj Close'].pipe(normalized)
Date Ticker Adj Close Prices Normalized
0 2020-01-02 ABC 1 0
1 2020-01-03 ABC 2 0.25
2 2020-01-04 ABC 3 0.5
3 2020-01-05 ABC 4 0.75
4 2020-01-06 ABC 5 1

你可以做以下实验:

def p(x):
    print('1')
    
print('pipe')
x = df['Adj Close'].pipe(p)
print('transform')
x = df['Adj Close'].transform(p)

您可以进一步修改 p 函数以打印发送给它的内容:

def p(x):
    print(type(x))
    
print('pipe')
x = df['Adj Close'].pipe(p)
print('transform')
x = df['Adj Close'].transform(p)

你会看到 pipe 参数是一个系列,而 transform 参数是一个 int(我的 df 是 5 次)。

【讨论】:

  • 或者,您可以像 Quang Hoang 在评论中显示的那样将该功能应用于整个系列。
  • @Alfredo Di Massimo。你好 !如果这回答了您的问题,请勾选接受答案。谢谢。
猜你喜欢
  • 2021-11-26
  • 2019-09-23
  • 2019-02-25
  • 2016-02-14
  • 2020-09-17
  • 2021-07-13
  • 2021-04-08
  • 2021-07-05
  • 2020-01-30
相关资源
最近更新 更多