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

构建CSV与API到BigQuery的数据管道时遇KeyError问题求助

KeyError: 'lastUpdateEt' 问题分析与解决

问题原因

  1. API字段不匹配:你调用的Covid Tracking API(https://api.covidtracking.com/v1/states/ca/daily.json)已停止维护,返回数据中不存在lastUpdateEt字段,字段结构或名称已发生变更。
  2. CSV字段缺失:本地CSV文件New_york_covid_data.csv中可能没有lastUpdateEt列,或者列名拼写、大小写与代码中使用的不一致。
  3. 过滤后无数据(次要):如果df1[df1['date'] >= 20210101]过滤后返回空DataFrame,后续访问字段也会触发KeyError,但报错栈显示核心问题是字段不存在。

解决步骤

1. 确认数据源的实际字段

在提取数据的函数中添加列名打印,明确真实字段:

def covidExtractApi():
    api = "https://api.covidtracking.com/v1/states/ca/daily.json"
    api_opener = urlopen(api)
    data = json.load(api_opener)
    df1 = pd.DataFrame(data)
    # 打印API返回的所有列名
    print("API数据列名:", df1.columns.tolist())
    df1 = df1[df1['date'] >= 20210101]
    return df1

def covidExtractCsv():
    df2 = pd.read_csv(r"C:\Users\Chris\PycharmProjects\Projects\Data_Engineering_Projects\Covid_folder\New_york_covid_data.csv")
    # 打印CSV的所有列名
    print("CSV数据列名:", df2.columns.tolist())
    df2 = df2[df2['date'] >= 20210101]
    return df2

运行后查看输出,找到对应更新时间的字段(比如lastModified或updated等)。

2. 修改代码中的字段引用

根据实际字段名替换lastUpdateEt和checkTimeEt。例如,如果API返回的是lastModified,修改covidTransform函数:

# 替换lastUpdateEt为实际字段名,比如lastModified
df1['dateLastUpdated'] = df1["lastModified"].str.split(' ', expand=True)[0]
df1['timeLastUpdated'] = df1["lastModified"].str.split(' ', expand=True)[1]
df2["dateLastUpdated"] = df2["lastModified"].str.split(' ', expand=True)[0]
df2["timeLastUpdated"] = df2["lastModified"].str.split(' ', expand=True)[1]

如果checkTimeEt也不存在,同样替换为CSV和API中实际存在的对应字段。

3. 添加字段存在性检查(可选)

为避免后续出现类似问题,在访问字段前先校验:

def covidTransform(df1, df2):
    # 检查API数据的必要字段
    required_fields_api = ['lastUpdateEt', 'checkTimeEt']
    missing_api = [f for f in required_fields_api if f not in df1.columns]
    if missing_api:
        raise ValueError(f"API数据缺失必要字段:{missing_api}")
    
    # 检查CSV数据的必要字段
    required_fields_csv = ['lastUpdateEt', 'checkTimeEt']
    missing_csv = [f for f in required_fields_csv if f not in df2.columns]
    if missing_csv:
        raise ValueError(f"CSV数据缺失必要字段:{missing_csv}")
    
    # 后续转换逻辑...

4. 更换维护中的数据源(可选)

由于Covid Tracking Project在2021年3月后已停止更新数据,若需要最新疫情数据,建议更换为CDC官方API或其他仍在维护的疫情数据接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:40:46