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

Python Pandas中df.loc[0]指向第二行而非首行的问题排查

问题原因
    1. CSV读取参数默认值导致行索引错位
      pd.read_csv默认参数header=0,会把CSV文件的第一行内容识别为DataFrame的列名,不会纳入数据行范围。所以你代码中df.loc[0]对应的是原文件的第二行内容,你想要修改的第一行已经被存为df.columns,不在数据行中,自然无法通过修改数据行的方式更新。
    1. 链式索引存在赋值失效风险
      你使用的df.loc[0][get_date()] = xxx属于链式索引操作,Pandas无法确定你修改的是原DataFrame还是临时生成的副本,大概率会触发SettingWithCopyWarning,修改不会生效到原数据。
修复方案
  1. 读取模板CSV时关闭自动识别表头,修改读取代码为:
df = pd.read_csv("reg format.csv", header=None)

该配置会将CSV的所有行都作为数据行读取,此时df.loc[0]就对应原文件的第一行内容。如果需要自定义列名(比如第一列是老师名称,后续列是1~31号日期),可以在读取后手动设置:

df.columns = ["teacher_name"] + [str(i) for i in range(1, 32)]
  1. 替换所有链式索引为安全的loc赋值写法,同时指定行和列:
    原来的写法:
def update_day(df):
    df.loc[0][get_date()] = get_day()

修改为:

def update_day(df):
    df.loc[0, str(get_date())] = get_day()

同理修改其他函数中的链式赋值操作,比如update_date函数改为:

def update_date(df):
    df.loc[1, str(get_date())] = get_date()
  1. 补充修复代码中的语法和逻辑问题
    update_sunday函数中存在get_date+1()的语法错误,且replace规则重复无效,修改为:
def update_sunday(df):
    if get_day().lower() == "saturday":
        next_day = str(int(get_date())+1)
        df[next_day].replace({"0": "3"}, inplace=True)
        df.loc[0, next_day] = "Sunday"

内容的提问来源于stack exchange,提问作者S.Uzair

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:45:03