pandas - 具有多个元素的数组的真值是不明确的。使用 a.any() 或 a.all()',
问题描述
当我使用 pandas.DataFrame.apply 时,它显示“具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()”
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(50,2))
def fun(df):
median=df.median()
mad=(df-median).median()
if df>(median+3.1483*mad):
df=median+3.1483*mad
elif df<(median-3.1483*mad):
df=median-3.1483*mad
return df
df.apply(fun)
解决方案
我认为需要:
def fun(df):
median=df.median()
mad=(df-median).median()
m1 = df>(median+3.1483*mad)
df= df.mask(m1, median+3.1483*mad)
m2 = df<(median-3.1483*mad)
df=df.mask(m2, median-3.1483*mad)
return df
df3 = df.apply(fun)
另一种解决方案,但是因为那时mad
很接近并且也为零,所以在两列中获取均值的输出:0
3.1483*mad
-3.1483*mad
df.median()
np.random.seed(786)
df = pd.DataFrame(np.random.randn(10,2))
print (df)
0 1
0 -0.799307 1.065501
1 -0.246459 0.856806
2 -1.505766 -1.071535
3 -0.027080 0.707278
4 -1.946180 0.653074
5 0.093481 -1.825020
6 1.990691 0.811006
7 2.367850 -0.388028
8 -2.174134 -1.161844
9 -0.279455 0.082329
median=df.median()
print (median)
0 -0.262957
1 0.367702
dtype: float64
mad=(df-median).median()
print (mad)
0 1.387779e-17
1 -2.775558e-17
dtype: float64
m1 = df.gt((median+3.1483*mad), axis=1)
m2 = df.lt((median-3.1483*mad), axis=1)
print (m1)
0 1
0 False True
1 True True
2 False False
3 True True
4 False True
5 True False
6 True True
7 True False
8 False False
9 False False
print (m2)
0 1
0 True False
1 False False
2 True True
3 False False
4 True False
5 False True
6 False False
7 False True
8 True True
9 True True
s1 = median+3.1483*mad #like s1 = median
s2 = median-3.1483*mad #like s2 = median
print (s2)
0 -0.262957
1 0.367702
dtype: float64
print (s1)
0 -0.262957
1 0.367702
dtype: float64
df3 = df.mask(m1, s1, axis=1).mask(m2, s2, axis=1)
print (df3)
0 1
0 -0.262957 0.367702
1 -0.262957 0.367702
2 -0.262957 0.367702
3 -0.262957 0.367702
4 -0.262957 0.367702
5 -0.262957 0.367702
6 -0.262957 0.367702
7 -0.262957 0.367702
8 -0.262957 0.367702
9 -0.262957 0.367702
推荐阅读
- java - 将 Java Web 应用程序部署到 Heroku:由 ClassNotFoundException 引起的 NoClassDefFoundError
- python - Python将数据框中的列相乘
- javascript - 在输入类型文件中为“onchange”方法传递参数时出现意外的令牌错误?
- python - DeepFaceLab_NVIDIA 的 TensorFlow 失败
- javascript - 如何从源 json 对象生成嵌套的对象数组
- php - 为什么我的联系表中的附件无法通过?
- java - 原始类型作为“正常”变量?
- distributed-training - 鉴于技术会议被取消,您如何接受培训?
- c++ - C++ std 中使用的哈希算法
- python - 无法在 Django-3 中访问 Django 管理员站点