You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改从CSV导入的Pandas DataFrame数据格式?

用Pandas转换对阵+赔率CSV数据结构

步骤说明

你的核心需求是把「每组首行存对阵信息、后续行存对应赔率」的结构,转换成「每行包含完整对阵+赔率」的格式,核心思路是标记对阵行→向下填充对阵信息→过滤并整理数据,具体代码如下:

假设原始数据结构

先明确你的CSV大概结构(以3列为例,列名导入后为0,1,2):

index | 0         | 1    | 2
0     | Milan     | Draw | Juventus
1     | 2.1       | 3.4  | 3.2
2     | 1.9       | 3.5  | 3.3
3     | Barcelona | Draw | RealMadrid
4     | 2.0       | 3.6  | 3.1

具体代码实现

  1. 导入数据(你已经解决了Unnamed列问题,这里直接沿用你的导入方式)
import pandas as pd
# 假设你的CSV无表头,用header=None;如果有表头,去掉这个参数
df = pd.read_csv('your_data.csv', index_col=0, header=None)
  1. 标记对阵行
    通过判断是否包含固定值Draw来识别对阵行(如果你的平局标识不是Draw,替换成对应值):
df['is_match'] = df[1] == 'Draw'
  1. 向下填充对阵信息
    把对阵行的主队、客队信息填充到下面的赔率行:
# 提取对阵行的主队、客队信息,然后向下填充
df['home_team'] = df.loc[df['is_match'], 0].ffill()
df['away_team'] = df.loc[df['is_match'], 2].ffill()
  1. 过滤并整理数据
    去掉原始的对阵行,重命名赔率列并转换数据类型:
# 过滤掉对阵行,只保留赔率行
final_df = df[~df['is_match']].copy()

# 重命名赔率列
final_df = final_df.rename(columns={0: 'home_odds', 1: 'draw_odds', 2: 'away_odds'})

# 转换赔率列为数值类型
final_df[['home_odds', 'draw_odds', 'away_odds']] = final_df[['home_odds', 'draw_odds', 'away_odds']].astype(float)

# 整理列顺序(按需调整)
final_df = final_df[['home_team', 'away_team', 'home_odds', 'draw_odds', 'away_odds']]

最终结果

处理后的数据结构如下:

index | home_team | away_team  | home_odds | draw_odds | away_odds
1     | Milan     | Juventus   | 2.1       | 3.4       | 3.2
2     | Milan     | Juventus   | 1.9       | 3.5       | 3.3
4     | Barcelona | RealMadrid | 2.0       | 3.6       | 3.1

特殊情况处理

  • 如果你的平局标识不是Draw,替换df['is_match'] = df[1] == 'Draw'中的Draw为实际值;
  • 如果原始数据的赔率列是带逗号的字符串(比如2,1),先做替换:final_df['home_odds'] = final_df['home_odds'].str.replace(',', '.').astype(float);
  • 如果数据量极大(千万行级别),可以用df.loc代替链式操作,减少内存占用。

内容的提问来源于stack exchange,提问作者eestlane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:55:16