Python |如何制作一个计算字符串的程序

时间:2018-10-07 13:45:15

标签: python pandas

我正在尝试使用可导入.txt文件的熊猫创建Python脚本, 计算每个主题的平均值

我正在尝试打开此“ file.txt”:

code name subject1 subject2 subject3
1234 Ali 6 0 8
1235 Carl 4 7 7
1236 Jason 3 5 0

并介绍以下内容:

subject1 average is: 4.3
subject2 average is: 6
subject3 average is: 7.5
  • subject1的计算方式如下:(6 + 4 + 3)/ 3,
  • subject2的计算方式如下:(7 + 5)/ 2 <-因为一个人的0 表示他/她没想到,所以他们的0不加和计数 向平均水平

  • subject3的计算方式如下:(8 + 7)/ 2 <-如上

    我还试图找到一种使脚本更灵活并能够添加更多主题和更多人的方法(因此3个而不是5个)

这是我到目前为止的代码:

# read input file
df = pd.read_csv('file.txt')

# calculate mean, ignoring 0 values
df['mean'] = df.iloc[:, 2:].astype(float).replace(0, np.nan).mean(1)

# iterate rows and print results
for name, mean in df.set_index('name')['mean'].items():
    print(f'{name} has average of {mean:.2f}')
  • 它(横向)计算每个人的平均值
  • 但是我想不出一种方法可以垂直完成每个主题。

感谢帮助人员^ _ ^

2 个答案:

答案 0 :(得分:2)

您提供给1的参数pd.Series.mean是计算平均值的轴;默认值是列,因此您要明确告诉它计算行均值。删除该参数,您应该会很好。

In [155]: df.iloc[:, 2:].astype(float).replace(0, np.nan).mean()
Out[155]:
subject1    4.333333
subject2    6.000000
subject3    7.500000

答案 1 :(得分:0)

如果我对您的理解很好,那么您想这样做。

import pandas as pd
data=pd.read_csv('data.csv',sep=' ')
    #You can change the range for number of subjects
    for i in range(1,4):
    #Print average for subject
    print(datos['subject'+str(i)].mean())