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

Python中df["row_name"]与df.loc["row_name"]的区别及添行报错问题

pandas中df["name"]与df.loc["name"]的区别及报错原因解析

为什么df["new_row"] = [...]会报错?

df["xxx"]是pandas专门用于操作列的语法:当你给一个不存在的列名赋值时,pandas会默认你要新增一列。这时候要求右侧的数据源长度必须和DataFrame的行数(也就是索引index的长度,这里是11)一致。你的列表只有4个元素,和11行的长度不匹配,所以触发ValueError。

为什么df.loc["new_row"] = [...]能成功添加行?

df.loc["xxx"]是基于行标签的索引器:当你给一个不存在的行标签赋值时,pandas会默认你要新增一行。此时要求右侧的数据源长度和DataFrame的列数一致(你的列表有4个元素,正好匹配df的4列),所以能成功在DataFrame底部新增一行标签为new_row的数据。

两者的核心区别

  • 操作对象
    • df["name"]:仅针对列操作——要么访问已存在的列,要么新增列。赋值时数据长度需等于行数。
    • df.loc["name"]:针对行(或行+列组合)操作——要么访问已存在的行,要么新增行。赋值时数据长度需等于列数。
  • 索引逻辑
    • df["name"]是纯粹的列索引器,只识别列标签,和行索引无关。
    • df.loc["name"]是行标签索引器,还可以扩展为df.loc["行标签", "列标签"]来精准定位单元格或子数据集。
  • 赋值行为
    • 用df["name"]赋值时,若列名不存在,会在DataFrame右侧追加一列。
    • 用df.loc["name"]赋值时,若行标签不存在,会在DataFrame底部追加一行。

示例代码

import pandas as pd
# 构造一个4列的示例DataFrame
df = pd.DataFrame(
    [[1, False, "alice", 18], [2, True, "bob", 19]],
    columns=["id", "active", "name", "age"]
)

# 新增列:成功(数据长度2等于行数2)
df["score"] = [90, 85]

# 新增行:成功(数据长度4等于列数4)
df.loc["new_row"] = [5, True, "joe", 20, 88]

# 以下代码会报错:数据长度4≠当前行数3
# df["new_row"] = [5, True, "joe", 20]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:35:17