pandas计算列的平均值,该列具有列表而不是单个值

6

我有一个pandas数据帧,它只有一列,每行都有一个值列表。我需要使用每行相应的值来计算平均值。也就是说,我需要计算列表中八个值的平均值。列表中的每个元素都是一个变量的值。

>>> df_ex
0    [1, 2, 3, 4, 5, 6, 7, 8]
1    [2, 3, 4, 5, 6, 7, 8, 1]

我尝试将其转换为 numpy 数组,然后取平均值,但是我一直在收到错误 TypeError: unsupported operand type(s) for /: 'list' and 'int'。我知道应该将其转换为列而不是列表,但在我的情况下这不可能。你有什么想法吗?
4个回答

8

您可以先将其转换为嵌套列表,然后再转换为array,然后计算mean

a = np.array(df_ex.tolist())
print (a)
[[1 2 3 4 5 6 7 8]
 [2 3 4 5 6 7 8 1]]
 
# Mean of all values
print (a.mean())
4.5

# Specify row-wise mean
print (a.mean(axis=1))
[ 4.5  4.5]

# Specify column-wise mean
print (a.mean(axis=0))
[ 1.5  2.5  3.5  4.5  5.5  6.5  7.5  4.5]

1
你可以通过传递嵌套列表并指定轴来调用np.mean设置
df_ex = pd.DataFrame(dict(
    col1=[[1, 2, 3, 4, 5, 6, 7, 8],
          [2, 3, 4, 5, 6, 7, 8, 1]]))

df_ex

                       col1
0  [1, 2, 3, 4, 5, 6, 7, 8]
1  [2, 3, 4, 5, 6, 7, 8, 1]

解决方案。
np.mean(df_ex['col1'].tolist(), axis=1)

array([ 4.5,  4.5])

或者

np.mean(df_ex['col1'].tolist(), axis=0)

array([ 1.5,  2.5,  3.5,  4.5,  5.5,  6.5,  7.5,  4.5])

0
from ast import literal_eval  
import pandas as pd  
df=pd.read_csv("yourfile.csv", converters={"listcol": pd.eval})
def getMean(t:list[int]):  
    return sum(t)/len(t)
df["mean of listcol"]=df.apply(lambda row: getMean(row["listcol"]), axis=1)  

#要获取列的平均值,其中每行是一个列表,请取np.sum(df["listcol的平均值"])/ len(df)


0

最简单的方法:

col.apply(np.mean)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接