python对数据求均值_使⽤NA将数据读取到python中并按⾏计
算均值
我正在读取csvfile中的数据,并尝试按列计算平均值。虽然列数是固定的,但⾏数不是固定的。因此,我⾸先读⼊需要的⾏,将它们制成列
表,然后形成该列表的numpy数组。但这是⾏不通的。
import csv
import numpy
读⼊(循环遍历每个⽂件并到匹配项,然后将其追加):
with open(input_file, mode='r') as f:
reader = ader(f, delimiter=';')
for row in reader:
pass
# matchin algorithm omitted
found_line = row
del found_line[0] #remove first entry on name
input_file好像
Weihnachtsmann;16;30.3125;0.00677830307346;0.000491988890358;0.2796728754;0.00371057513915;0.00066711
Tannenbaum;6;33.5;0.032918005099;0.00312809941211;0.308224811515;0.0124857679873;0.00644874360685;0.0
Heilier Klaus;1;NA;NA;NA;NA;NA;NA;NA
然后,从匹配的条⽬中列出⼀个列表:
author_list.append(','.join(found_line))
author_array = numpy.array(author_list)
我不是⾸先创建numpy数组,因为我听说它附加到numpy数组中是⾮Python且缓慢。
print author_arry
产量
['1,NA,NA,NA,NA,NA,NA'
'6;33.5;0.032918005099;0.00312809941211;0.308224811515;0.0124857679873;0.00644874360685;0.00066711140760 '16;30.3125;0.00677830307346;0.000491988890358;0.2796728754;0.00371057513915;0.000667111407605;0.0017789
但我什⾄不确定这是⼀个具有我想要的尺⼨的数组(应该是⼋列)还是⼀列三⾏。
之后,我必须将NA来⾃的R转换为numpy的NaN(如果我正确的话),我不知道该怎么做。我试过了
[place('NA','nan') for author_entry in author_list]
但我得到⼀个错误。
解决⽅案
您可以使⽤NumPy从⽂件中读取数据的⽅式有多种。这是使⽤的⼀种⽅法np.genfromtxt。第⼀列中的名称将成为NumPynan值,⽂件中
的任何其他⾮浮点字符串也是如此:
>>> arr = np.genfromtxt(input_file, delimiter=';', dtype=np.float64)
>>> arr
array([[ nan, 1.60000000e+01, 3.03125000e+01,
6.77830307e-03, 4.91988890e-04, 2.79672875e-01,
3.71057514e-03, 6.67111408e-04, 1.77896375e-03],
[ nan, 6.00000000e+00, 3.35000000e+01,
3.29180051e-02, 3.12809941e-03, 3.08224812e-01,
1.24857680e-02, 6.44874361e-03, 6.67111408e-04],
python怎么读csv数据[ nan, 1.00000000e+00, nan,
nan, nan, nan,
nan, nan, nan]])
这是⼀个3⾏9列的数组。要删除每⼀⾏的第⼀项,您可以使⽤进⾏切⽚和重新分配arr = arr[:, 1:]。您可以使⽤来计算按⾏平均值np.nanmean(nan在计算平均值时忽略值):
>>> np.nanmean(arr, axis=1)
array([ 5.82569998, 4.98298407, 1. ])

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。