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

使用pd.concat合并DataFrame触发ValueError: no types given求助

问题排查与解决

错误核心原因:列名隐藏差异

触发ValueError: no types given的本质是两个DataFrame列名不匹配——从CSV读取的PerfsL12列名带有前导空格(比如' Date'、' Used_players'),而网页读取后手动设置列名的PerfsL1列名无空格('Date'、'Used_players'),pd.concat找不到对应列的匹配类型,因此报错。

验证方法

先打印两个DataFrame的列名,直观确认差异:

print("PerfsL1列名:", PerfsL1.columns.tolist())
print("PerfsL12列名:", PerfsL12.columns.tolist())

输出会显示PerfsL12的列名前存在空格,和PerfsL1的列名完全不对应。

修复步骤

方法1:读取CSV时自动去除列名空格

修改CSV读取代码,用rename批量去掉列名前后的空格:

PerfsL12 = pd.read_csv('Ligue_1_Perfs.csv', index_col=0).rename(columns=lambda x: x.strip())

方法2:强制对齐列名

如果方法1无效,直接将PerfsL12的列名替换为PerfsL1的列名列表:

PerfsL12.columns = PerfsL1.columns

可选:统一数据类型(避免后续异常)

合并前确认对应列的数据类型一致,比如检查:

print(PerfsL1.dtypes)
print(PerfsL12.dtypes)

若某列类型不一致(比如age在一个DataFrame中是字符串,另一个是数值),用pd.to_numeric统一转换:

# 示例:批量转换数值列类型
numeric_cols = ['age', 'Possesion', 'nb_matchs', 'Buts', 'Assists']
for col in numeric_cols:
    PerfsL1[col] = pd.to_numeric(PerfsL1[col], errors='coerce')
    PerfsL12[col] = pd.to_numeric(PerfsL12[col], errors='coerce')

修改后的完整代码

import datetime
import pandas as pd

Aujourdhui = datetime.datetime.now().strftime("%X")

PerfsL1 = pd.read_html('https://fbref.com/fr/comps/13/stats/Statistiques-Ligue-1#all_stats_standard', header=1)[0]
PerfsL1.columns = ['Équipe', 'Used_players', 'age', 'Possesion', "nb_matchs", "Starts", "Min",
                      '90s','Buts','Assists', 'No_penaltis', 'Penaltis', 'Penaltis_tentes',
                      'Cartons_jaunes', 'Cartons_rouges', 'Buts/90mn','Assists/90mn', 'B+A /90mn',
                      'NoPenaltis/90mn', 'B+A+P/90mn','Exp_buts','Exp_NoPenaltis', 'Exp_Assists', 'Exp_NP+A',
                      'Exp_buts/90mn', 'Exp_Assists/90mn','Exp_B+A/90mn','Exp_NoPenaltis/90mn', 'Exp_NP+A/90mn']
PerfsL1.insert(0, "Date", Aujourdhui)

# 修复列名空格问题
PerfsL12 = pd.read_csv('Ligue_1_Perfs.csv', index_col=0).rename(columns=lambda x: x.strip())

# 统一数值列类型
numeric_cols = ['age', 'Possesion', 'nb_matchs', 'Buts', 'Assists']
for col in numeric_cols:
    PerfsL1[col] = pd.to_numeric(PerfsL1[col], errors='coerce')
    PerfsL12[col] = pd.to_numeric(PerfsL12[col], errors='coerce')

# 执行合并
PerfsL1 = pd.concat([PerfsL1, PerfsL12], ignore_index=True)
print(PerfsL1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:15:29