过滤 Pandas DataFrame 列错误:传递的项目数错误 4,位置暗示 1

Posted

技术标签:

【中文标题】过滤 Pandas DataFrame 列错误:传递的项目数错误 4,位置暗示 1【英文标题】:Filter Pandas DataFrame Column Error: Wrong number of items passed 4, placement implies 1 【发布时间】:2021-09-25 03:28:10 【问题描述】:

我创建了一个带有一些 Numpy 数组列的 pandas DataFrame。我想过滤其中一列并将其分配给新列。

df = pd.DataFrame('Signal' : signalarr, 'Signal RMS with Peaks' : RMS_Calculator(signalarr) , columns=['Signal','Signal RMS with Peaks'])
df['Signal CMA with Peaks'] = df['Signal'].expanding(2).mean()
df.loc[[0], ['Signal CMA with Peaks']] = df['Signal'][0]
df['Peaks'] = random_peak

#print(df[df['Signal'] >= 10])
#df['Signal Without Peaks'] = df[df['Signal'] >= 10] # error: Wrong number of items passed 4, placement implies 1
df['Signal Without Peaks'] = df['Signal'] >= 10 # I need the values, not the boolean.
df

我阅读了这篇 Pandas - Filtering value by columns throws error (ValueError: Wrong number of items passed 3, placement implies 1) 的帖子并尝试了解决方案,但仍然出现错误。

通过像 df['Signal Without Peaks'] = df[df['Signal'] >= 10] 这样的过滤,我之前没有收到错误。有什么想法我错了吗? 谢谢!

更新:我在过滤值之前创建了另一个数据框,我得到了 NaN 值,这是我的应用程序所需的结果。

df = pd.DataFrame(signalarr, columns=['Signal'])
df['Signal Without Peaks'] = df[df['Signal'] <= 10]

Dataframe

【问题讨论】:

【参考方案1】:

根据定义,数据帧的所有列都具有相同的长度(因此也称为数据帧的长度)。这就是为什么您不能将过滤(因此更短)的列作为新列添加到原始数据框中的原因。

相反,您可能希望将过滤后的值分配给一个新名称,例如:

df_without_peaks = df[df['Signal'] >= 10]

编辑:要在信号值小于 10 时填写 NaN 值,可以使用np.where()

import numpy as np
df['Signal filtered'] = np.where(df['Signal'] >= 10, df['Signal'], np.nan)

【讨论】:

谢谢,所以也许一种方法是当信号的值小于 10 时用 NaN 值填充原始值。我不知道如何。 当然可以。我在答案中添加了一种方法。

以上是关于过滤 Pandas DataFrame 列错误:传递的项目数错误 4,位置暗示 1的主要内容,如果未能解决你的问题,请参考以下文章

根据 Pandas Dataframe 中的时间戳列过滤给定的列(计数)

通过字典列表过滤 pandas DataFrame

06 pandas DataFrame - 数据过滤、NaN处理、统计方法

Pandas - 过滤和正则表达式搜索 DataFrame 的索引

在 Pandas 中为列名包含模式的多列过滤 DataFrame

Python Pandas:获取列不为空的DataFrame的行