pandas - 过滤 Pandas DataFrame 列错误:传递的项目数错误 4,位置暗示 1
问题描述
我创建了一个带有一些 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 意味着 1)并尝试了解决方案,但仍然收到错误。
通过这样的过滤df['Signal Without Peaks'] = df[df['Signal'] >= 10]
,我之前没有收到错误。有什么想法我错了吗?谢谢!
更新:我在过滤值之前创建了另一个数据框,我得到了 NaN 值,这是我的应用程序所需的结果。
df = pd.DataFrame(signalarr, columns=['Signal'])
df['Signal Without Peaks'] = df[df['Signal'] <= 10]
解决方案
根据定义,数据帧的所有列都具有相同的长度(因此也称为数据帧的长度)。这就是为什么您不能将过滤(因此更短)列作为新列添加到原始数据框中的原因。
相反,您可能希望将过滤后的值分配给新名称,例如:
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)
推荐阅读
- java - 在 wildfly jar 中包含第三方库(keycloak SPI)
- javascript - 在 v-html 属性中显示原始 html
- imagemagick - imagemagick 嵌套重心
- tensorflow - 张量流中的 MS-SSIM
- javascript - 从缓存填充输入时,jquery更改功能不起作用
- c++ - 算法:改进 c++ 排序
- python - 如何从python字符串短语中删除unicode字符?
- mysql - MySQL - 在计划中查找未使用的时间段
- android - Xamarin Android DownloadManager下载文件到100%,然后进入Queued,最后说下载不成功
- python - Django 输入表单未显示在我的模板中