本文目录导读:

在Python中查看VAR(视频助理裁判)介入的判罚,通常需要在足球比赛数据集或自定义的事件日志中查找。
由于“VAR介入”并不是一个统一的固定词条,它在不同数据表中的字段名可能不同,以下是几种常见的查看方式和代码逻辑,你可以根据你的数据结构对号入座:
最常见结构:事件日志中有明确的“介入”标记
如果数据表中有类似 var_intervention 或 review 的布尔字段(True/False),或者 decision 字段中包含“VAR”字样,直接筛选即可。
import pandas as pd
# 假设 df 是存有比赛事件的数据框
df = pd.read_csv('match_events.csv')
# 方式一:如果有一个专门的布尔列(True表示VAR介入)
var_events = df[df['var_intervention'] == True]
print(f"VAR介入次数: {len(var_events)}")
print(var_events[['minute', 'team', 'player', 'original_decision', 'final_decision']])
# 方式二:如果决定类型字符串中包含“VAR”关键词
var_kw = df[df['decision'].str.contains('VAR', case=False, na=False)]
print(var_kw)
进阶结构:只有“主判罚”和“复核后判罚”两列
这种情况下,你需要找出原始判罚和最终判罚不一致的记录,这些通常就是VAR介入并改判的事件。
# 假设有 original_decision(主裁最初判罚)和 final_decision(VAR复核后判罚)
overturned = df[df['original_decision'] != df['final_decision']]
print("VAR改判记录(前后不一致):")
print(overturned[['minute', 'original_decision', 'final_decision']])
# 如果原始判罚和最终判罚相同(维持原判),但你想看所有VAR检查的事件,
# 可能还需要检查是否有一个 'var_check' 列
checked = df[df['var_check'] == 1] # 1 表示检查过
结构化日志(JSON/嵌套数据)
如果数据是嵌套结构(event_data 中包含 var 字典),则需要用 json_normalize 展开。
import json
with open('match_data.json', 'r') as f:
data = json.load(f)
var_events = []
for event in data['events']:
# 假设每个事件里有 'var' 键,且 'var' 键存在
if 'var' in event and event['var'].get('intervened') == True:
var_events.append({
'minute': event['minute'],
'player': event.get('player'),
'reason': event['var'].get('reason'), # 如 'Handball'、'Offside'
'outcome': event['var'].get('outcome') # 如 'Goal'、'Penalty'
})
print(var_events)
如果需要可视化或统计
你可以按球队、比赛阶段(上半场/下半场)来聚合查看。
# 统计每个球队被VAR介入影响的总数
var_count_by_team = var_events.groupby('team')['event_id'].count()
print(var_count_by_team)
# 查看VAR介入最常发生的时间段(以5分钟为窗口)
var_events['period'] = var_events['minute'] // 5 * 5
period_counts = var_events['period'].value_counts().sort_index()
print(period_counts)
找不到对应字段怎么办?
如果上述字段都不存在,通常是数据集不包含VAR信息,或者变量名比较特殊(is_cancelled、review_type),你可以用以下命令查看所有列名来找线索:
print(df.columns.tolist())
# 或者搜索包含 'var'、'review'、'video'、'check' 的列
var_cols = [col for col in df.columns if 'var' in col.lower() or 'review' in col.lower()]
print("潜在相关列:", var_cols)
关键点提示
- 区分“VAR介入”和“VAR静默检查”:很多数据源只记录“改判”或“介入”,部分赛事数据连“检查但没改判”也会记录(字段名通常是
VAR_Check或Reviews)。 - 判罚决定:通常判罚代码(如
Goal、Penalty、No Penalty)会存储在decision或outcome列中,你可以对比original和final看是否被推翻。
如果你能提供你的数据表格的前几行数据或列名列表,我可以帮你写更精确的筛选代码。