首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python对Excel文件中的“体育统计”进行排序和存储?

如何使用Python对Excel文件中的“体育统计”进行排序和存储?
EN

Stack Overflow用户
提问于 2018-01-31 21:53:39
回答 2查看 315关注 0票数 0

我有一个带有体育数据的excel电子表格--一个标题行,上面有团队、结果、日期等内容,还有其中所有球队的行(例如,如果是棒球,前162排是一个队的单项比赛,那么下一个162排是另一个队的比赛,等等)。

我可以用XLRD轻松地将它们读入python,但我不知道如何准确地存储它们,这样我就可以轻松地访问有关特定团队的信息。我可以使用defaultdict(列表),但老实说,我并不太确定如何实际访问任何特定的内容。

例如:

代码语言:javascript
复制
import xlrd
import xlwt
import os.path
import math
import pandas as pd
from xlutils.copy import copy as xl_copy
from collections import defaultdict



result = defaultdict(list)
workbook = xlrd.open_workbook("Sample.xls")
worksheet = workbook.sheet_by_index(1)
headers = worksheet.row(0)
for index in range(worksheet.nrows)[1:]:
    for header, col in zip(headers, worksheet.row(index)):
        result[header.value].append(col.value)

这会将我需要的所有内容存储在“结果”中,输出(如果我打印的话)是这样的(例如,一个3行文件):

代码语言:javascript
复制
Team {'Boston Red Sox','Boston Red Sox','Boston Red Sox'}
Score {'11-4','4-0','5-6'}
Result {'W','W','L'}

如何通过team更好地存储/排序这些信息,以便我能够轻松地访问与特定团队有关的信息?**如果我想将他们取得的胜利相加起来,例如,我将如何做到这一点?耳聋对这种情况有什么好处吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2018-01-31 23:42:10

假设您有以下数据:

您可能希望将数据存储为list of dictionaries,如下所示:

代码语言:javascript
复制
data = [{'Team':'Miami Heat', 'Score':'11:4', 'Result':'W'},
        {'Team':'Golden State Warriors', 'Score':'4:0', 'Result':'W'},
        {'Team':'Cleveland Cavaliers', 'Score':'5:6', 'Result':'L'}]

您可以通过以下代码来实现这一点:

代码语言:javascript
复制
import xlrd

workbook = xlrd.open_workbook('Sample.xls')
worksheet = workbook.sheet_by_index(0)

result = []
keys = [v.value.encode('ascii', 'ignore') for v in worksheet.row(0)]

for row_number in range(worksheet.nrows)[1:]:
  row_data = {}
  for col_number, cell in enumerate(worksheet.row(row_number)):
    row_data[keys[col_number]] = cell.value.encode('ascii', 'ignore')
  result.append(row_data)

然后,您可以轻松地对字典数组执行操作,比如按团队排序--例如使用以下代码:

代码语言:javascript
复制
sorted_team = sorted(result, key=lambda k: k['Team'])

假设您想浏览每本词典并获得特定团队的分数(例如“迈阿密热火”和"11-4"),那么您可以这样做:

代码语言:javascript
复制
for item in result:
  if item['Team'] == "Miami Heat":
    print item['Score']

这是一条很长的路。我非常肯定,您可以使用generator expressions或其他一些方法简化这段代码,让您了解一下。:)

我对这段代码的变量名做了一些调整,以使它们更具描述性。

票数 0
EN

Stack Overflow用户

发布于 2018-02-01 06:57:31

使用熊猫的read_excel方法。

这会将Excel数据放入与Excel表具有相同结构的整洁的dataframe中。

代码语言:javascript
复制
import pandas as pd
df = pd.read_excel("Sample.xls")

如果有日期时间列,请使用选项parse_dates=[datetime_column]

然后检查您的数据是否具有使用df.dtypes的所有正确的数据类型,如果需要更改某些数据,则使用df[column] = df[column].astype(new_data_type)

若要按团队对数据进行排序,请执行以下操作:

代码语言:javascript
复制
df = df.sort_values("Team").reset_index(drop=True)

要从某个团队中选择数据,请使用布尔索引:

代码语言:javascript
复制
df_team = df[df["Team"] == team]

如果您想要操作经过过滤的数据,请在上面的代码后面进一步放置一个.copy(),以创建一个新的对象。

要打印该团队的得分,您可以这样做:

代码语言:javascript
复制
print(df_team["Score"])

如果结果很长--这将省略数据,那么您可以这样做:

代码语言:javascript
复制
with pd.option_context('display.max_rows', None):
    print(df_team["Score"])

另一种方法是迭代行,但不建议这样做:

代码语言:javascript
复制
for _,row in df_team.iterrows():
    print(row["Score"])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48552061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档