Python 根据条件为变量赋值
如果值是数值,我想找到数据帧中一列的平均值,如果值是分类的,我想找到序列的模式。我只想使用一个我称之为“meanmode”的变量来实现这一点 当我尝试以下方法时:Python 根据条件为变量赋值,python,pandas,variables,mean,mode,Python,Pandas,Variables,Mean,Mode,如果值是数值,我想找到数据帧中一列的平均值,如果值是分类的,我想找到序列的模式。我只想使用一个我称之为“meanmode”的变量来实现这一点 当我尝试以下方法时: def mean_mode(val): return meanmode = val.mean() if val.dtype != 'object' else val.mode()[0] 我得到一个错误: ValueError: The truth value of a Series is ambiguous. Use a.em
def mean_mode(val):
return meanmode = val.mean() if val.dtype != 'object' else val.mode()[0]
我得到一个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我如何分配变量“meanmode”的数值平均值和分类模式平均值
到目前为止,我的代码是:
def report(val):
dtypes = val.dtypes
rows = val.T.apply(lambda x: x.count(), axis=1)
nuniq = val.T.apply(lambda x: x.nunique() , axis=1)
uniq = val.T.apply(lambda x: x.unique() if x.dtype == 'object' else None, axis=1)
total = val.T.apply(lambda x: x.isna().sum(), axis=1)
count = val.shape[0]
pc = np.round(total / count * 100, 2)
mini = val.min()
maxi = val.max()
meanmode = val.apply(lambda x: x.mode()[0] if x.dtype == 'object' else mean(val))
qualitydf = pd.concat([dtypes, rows, total, pc, meanmode, mini, maxi, nuniq, uniq],
keys=['Dtype', 'Available Rows', 'Missing Values',
'Percent Missing', 'Mean-Mode',
'Min', 'Max',
'No. Of Uniques', 'Unique Values'], axis=1)
return qualitydf
使用:
我基本上是做一个数据集的质量报告。向用户显示其平均值、最大值、最小值、数值和数据类型。虽然剩下的都很好,但我似乎无法为同一个变量指定mean和mode。现在min()值和mean()值是相同的。但是mode()工作正常。
val
是一个数据帧、一个系列还是什么?val是一个数据帧。从该数据帧中,该代码提取要在qualitydf(输出数据帧)中显示给用户的特性。虽然所有的代码都能正常工作,但我还是被困在meanmode问题上。
df = pd.DataFrame({
'A':list('abccef'),
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,4],
'F':list('baabbb')
})
def report(val):
dtypes = val.dtypes
rows = val.T.apply(lambda x: x.count(), axis=1)
nuniq = val.T.apply(lambda x: x.nunique() , axis=1)
uniq = val.T.apply(lambda x: x.unique() if x.dtype == 'object' else None, axis=1)
total = val.T.apply(lambda x: x.isna().sum(), axis=1)
count = val.shape[0]
pc = np.round(total / count * 100, 2)
mini = val.min()
maxi = val.max()
meanmode = val.apply(lambda x: x.mode()[0] if x.dtype == 'object' else mean(val))
qualitydf = pd.concat([dtypes, rows, total, pc, meanmode, mini, maxi, nuniq, uniq],
keys=['Dtype', 'Available Rows', 'Missing Values',
'Percent Missing', 'Mean-Mode',
'Min', 'Max',
'No. Of Uniques', 'Unique Values'], axis=1)
return qualitydf
df = df.pipe(report)
print(df)
Dtype Available Rows Missing Values Percent Missing Mean-Mode Min Max \
A object 6 0 0.0 c a f
B int64 6 0 0.0 4 4 5
C int64 6 0 0.0 2 2 9
D int64 6 0 0.0 1 0 7
E int64 6 0 0.0 2 2 9
F object 6 0 0.0 b a b
No. Of Uniques Unique Values
A 5 [a, b, c, e, f]
B 2 [4, 5]
C 6 [7, 8, 9, 4, 2, 3]
D 5 [1, 3, 5, 7, 0]
E 6 [5, 3, 6, 9, 2, 4]
F 2 [b, a]