用于组合dataframe列/行选择和内置函数的Python3语法
如何以正确的语法将数据帧的选定行与内置函数组合起来? 关键方程式(有错误)在下面用“***”标记。这个等式有三个方面: (1) 操作仅在数据帧的选定行[lo:hi]和列[ColumnName]上进行 (2) 检查此选择中的NaN条目,并将每个条目设置为(3)定义的随机数 (3) 随机数由库函数np.random.randint和 (a) 值的范围介于(avg+std)和(avg std)之间,总大小=null\u要生成的总[ColumnName]项。用于组合dataframe列/行选择和内置函数的Python3语法,python,numpy,dataframe,series,selectedindex,Python,Numpy,Dataframe,Series,Selectedindex,如何以正确的语法将数据帧的选定行与内置函数组合起来? 关键方程式(有错误)在下面用“***”标记。这个等式有三个方面: (1) 操作仅在数据帧的选定行[lo:hi]和列[ColumnName]上进行 (2) 检查此选择中的NaN条目,并将每个条目设置为(3)定义的随机数 (3) 随机数由库函数np.random.randint和 (a) 值的范围介于(avg+std)和(avg std)之间,总大小=null\u要生成的总[ColumnName]项。 (b) 然后将随机数除以平均值,使值正常化。
(b) 然后将随机数除以平均值,使值正常化。 avg和std是[ColumnName]下所有选定行值的平均值和标准偏差,分别由内置数据帧函数.mean和.std计算得出。avg、std和null_total被声明为数据帧类型,尽管它们可能只是系列
def process_Fill_and_Normalize(df,lo,hi,ColumnName):
avg = pd.DataFrame()
std = pd.DataFrame()
null_total = pd.DataFrame()
avg[ColumnName] = df[ColumnName][lo:hi].mean()
std[ColumnName] = df[ColumnName][lo:hi].std()
null_total[ColumnName] = df[ColumnName][lo:hi].isnull().sum()
***df[ColumnName][lo:hi][np.isnan(combined[ColumnName][lo:hi])] =
np.random.randint(avg[ColumnName] - std[ColumnName], avg[ColumnName] +
std[ColumnName], size=null_total[ColumnName])/avg[ColumnName]
return df
错误消息如下:
ValueError: The truth value of a Series is ambiguous. Use a.empty,
a.bool(), a.item(), a.any() or a.all().
/opt/conda/lib/python3.6/site-packages/pandas/core/generic.py in
__nonzero__(self)
915 raise ValueError("The truth value of a {0} is ambiguous. "
916 "Use a.empty, a.bool(), a.item(), a.any() or
a.all()."
--> 917 .format(self.__class__.__name__))
918
919 __bool__ = __nonzero__
如果您能就如何修改语法提出建议,我们将不胜感激
非常感谢hpaulj的回复,他建议打破长期的平衡。索引表达式在单独的方程式中定义。以下修改的代码起作用:
def process_Fill_and_Normalize(df,lo,hi,ColumnName):
avg = pd.DataFrame()
std = pd.DataFrame()
avg[ColumnName] = df[ColumnName][lo:hi].mean()
std[ColumnName] = df[ColumnName][lo:hi].std()
null_total[ColumnName] = df[ColumnName][lo:hi].isnull().sum()
mull_entry_index = np.isnan(combined[ColumnName][lo:hi])
df[ColumnName][lo:hi][mull_entry_index] =
np.random.randint(avg[ColumnName]
- std[ColumnName], avg[ColumnName] + std[ColumnName],
size=null_total[ColumnName])/avg[ColumnName]
return df
打破长表情。在简单布尔上下文中使用数组或序列时,会引发此值错误。如果上下文需要标量true/false,但数组有几个值。hpaulj,非常感谢您的建议。按照您的指导,代码现在可以工作了。