在列表中逐行查找均值
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 个值的平均值。
我正在尝试计算两列中值的平均值。
输入:
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 个值的平均值。