在列表中逐行查找均值

Find mean of value row wise in a list

我正在尝试计算两列中值的平均值。

输入:

tweetcricscore  34 #afgvssco   51
tweetcricscore  23 #afgvszim   46
tweetcricscore  24 #banvsire   12
tweetcricscore  456 #banvsned  46
tweetcricscore  653 #canvsnk   1
tweetcricscore  789 #cricket   178
tweetcricscore  625 #engvswi   46
tweetcricscore  86 #hkvssco    23
tweetcricscore  3 #indvsban    1
tweetcricscore  87 #sausvsvic  8
tweetcricscore  98 #wt20       56

我试图找到 col[1]col[3] 水平方向的平均值。 IE。

34 + 51 / 2 = 42.5

代码:

data = np.genfromtxt('keyword.csv', delimiter=',', comments=None)

d0=data[:,1]
d1=data[;,3]

并将输出 d2 写入同一输入文件的 col[4] 中。

我可以找到很多垂直计算均值的样本,但找不到水平样本。该数组不会被排序,因为这两个值在 col[0]col[2]. 方面彼此相关。任何建议表示赞赏。

提前致谢。

您可以在 Pandas 中轻松执行此操作:

import pandas as pd

df = pd.read_csv('keyword.csv', header = None)

df.columns = ['col1','col2','col3','col4']

df['avgCol'] = (df['col2'] + df['col4'])/2

在 numpy 中,您可以使用 np.mean 完成此操作(请参阅文档 here。您可以 运行 在任一轴上执行此操作;0 是垂直方向,1 是水平方向 诀窍是你需要先删除没有文本的列。在你 运行 你的行 data = np.genfromtxt('keyword.csv', delimiter=',', comments=None) 接下来删除有文本的列。在这种情况下,第 0 列和第 2 列,所以你可以删除以0 使用 data2 = np.delete(data, np.s_[::2], 1)。一旦你有了这个,你就可以使用 d3 = np.mean(data2, axis=1) 并将获得所需方法的数组。要将其作为原始数据中的第四列,请使用 data = np.insert(data, data.shape[1], d3, axis=1)

总计:

data = np.genfromtxt('keyword.csv', delimiter=',', comments=None)
data2 = np.delete(data, np.s_[::2], 1)
d3 = np.mean(data2, axis=1)
data = np.insert(data, data.shape[1], d3, axis=1)

我最大的警告是 data2 行,它只适用于 table 结构的显示方式。如果您有更多列或未按文本、浮动、文本、浮动等顺序排列的列,则必须重写它以正确删除带有文本的列。如有必要,您可以编写脚本来搜索加载到 numpy 数组后具有 NaN 值的列。例如 np.all(np.isnan(data), axis=0) 将 return 一个带有 True 和 False 值的一维数组,表示列中的所有值是否为 nan。然后,您可以使用它来删除索引处值为 true 的列。

功能上:

indices = np.all(np.isnan(data), axis=0)
indices = np.where(indices == True)
data2 = np.delete(data, np.s_[indices[0]],1)

Pandas 很棒,因为它会自动忽略包含平均值文本的列。它使这个计算更简单:

import pandas as pd
df = pd.read_csv('keywords.csv', header=None)
df[df.shape[1]] = df.mean(axis=1)

这会在数据框的末尾创建一个新列,其中包含该行中 integer/float 个值的平均值。