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
相关产品推荐
相关产品推荐

