【问题标题】:Correct way to analyse python data held in dictionary lists分析字典列表中保存的python数据的正确方法
【发布时间】:2017-10-12 09:01:11
【问题描述】:

刚开始接触 python 编程,我只是了解列表和字典。但现在我已经超出了我的深度,我的 google-fu 让我失望了。

我写了一个从 csv 文件中读取分数的小程序

def main():
  with open('test_data.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    test_database = []
    for row in reader:
        test_database.append(dict(username=row['username'],
                             subject=row['subject'],
                             dificulty=row['dificulty'],
                             answers=row['answers'],
                             questions=row['questions'],     
                             percentage=row['percentage'],     
                             grade=row['grade']))    
    csvfile.close()
  print(test_database)

它使用以下 csv 文件 test_data.csv

username,subject,dificulty,answers,questions,percentage,grade
ian47,History,Hard,1,5,20.0,D
ian47,Computer Science,Medium,5,5,75.0,B

并生成以下数据

[{'username': 'ian47', 'dificulty': 'Hard', 'questions': '5', 'grade': 'D', 'percentage': '20.0', 'answers': '1', 'subject': 'History'}, {'username': 'ian47', 'dificulty': 'Medium', 'questions': '5', 'grade': 'B', 'percentage': '75.0', 'answers': '5', 'subject': 'Computer Science'}]

我的问题是如何处理这些数据的最佳方式,我真的很喜欢它格式化数据并使其易于理解的方式,但现在我在检索和处理这些数据时遇到了困难。

我希望做以下事情:-

  • 显示一个人的所有结果
  • 显示每个科目每个难度一个人的最高/最低/平均分数
  • 显示每个科目的最高分和获得它的人

如果有人可以帮助并为我指出其中一两个问题的正确方向,我相信我将能够解决剩下的问题

【问题讨论】:

    标签: python-3.x list dictionary


    【解决方案1】:

    这个问题可能太宽泛了,但如果我是你,我会研究 Pandas。使用 pd.read_csv 你会得到一些非常像的东西(原文写为t.csv):

    >>> import pandas as pd 
    >>> t = pd.read_csv('t.csv')
    >>> t
      username           subject dificulty  answers  questions  percentage grade
    0    ian47           History      Hard        1          5        20.0     D
    1    ian47  Computer Science    Medium        5          5        75.0     B
    >>> t[t['grade'] == 'B']
      username           subject dificulty  answers  questions  percentage grade
    1    ian47  Computer Science    Medium        5          5        75.0     B
    >>> t.at[0, 'username'] = 'frank'
    >>> t
      username           subject dificulty  answers  questions  percentage grade
    0    frank           History      Hard        1          5        20.0     D
    1    ian47  Computer Science    Medium        5          5        75.0     B
    >>> t['percentage'].max()
    75.0
    >>> t.groupby(['subject', 'username'])['percentage'].max()
    subject           username
    Computer Science  ian47       75.0
    History           ian47       20.0
    Name: percentage, dtype: float64
    >>> 
    >>> t.to_csv('t.csv')
    

    然后,当我检查t.csv 的内容时,我得到:

    username,subject,dificulty,answers,questions,percentage,grade
    ian47,History,Hard,1,5,20.0,D
    ian47,Computer Science,Medium,5,5,75.0,B
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多