首页 > 解决方案 > 如何计算csv中一行列表的平均值?

问题描述

我在 CSV 文件中有这样的数据;

x         Y            
[2,3,4]   [3.4,2.5,3.1]
[4,5,2]   [6.2,7.5,9.7]
[2,6,9]   [4.6,2.5,2.4]
[1,3,6]   [8.9,7.5,9.2]

我想连续计算每个列表的平均值

x                Y            
[2,3,4] < mean   [3.4,2.5,3.1] < mean
[4,5,2] < mean   [6.2,7.5,9.7] < mean
[2,6,9] < mean   [4.6,2.5,2.4] < mean
[1,3,6] < mean   [8.9,7.5,9.2] < mean

并将平均值输出到 CSV 文件。

如何使用 python (pandas) 实现它?

编辑

经过一番研究,我找到了解决上述问题的方法;

import csv
import pandas as pd
import numpy as np
from ast import literal_eval

#csv file you want to import
filename ="xy.csv"
fields = ['X','Y'] #field names

df = pd.read_csv(filename,usecols=fields,quotechar='"', sep=',',low_memory = True)
df.X = df.X.apply(literal_eval)
df.X = df.X.apply(np.mean) #calculates mean for the list in field 'X'
print(df.X) #print result

df.Y = df.Y.apply(literal_eval)
df.Y = df.Y.apply(np.mean) #calculates mean for the list in field 'Y'
print(df.Y)

标签: pythonpandascsvdata-analysis

解决方案


通过应用映射

# df = df.applymap(lambda x: sum(eval(x))/ len(eval(x)))
df = df.applymap(np.mean) # suggested by alex
df = df.applymap(lambda x: sum(x)/ len(x))

输出:

          x         Y
0  3.000000  3.000000
1  3.666667  7.800000
2  5.666667  3.166667
3  3.333333  8.533333

推荐阅读