pandas向明确索引及列名的dataframe写入数据

在利用pandas进行数据处理时,我们经常会向df写入一些数据,向明确位置的df中写入数据,有以下几种方法:

1. 使用 df.loc[] 方法

语法df.loc[index, column] = value

特点

  • 基于标签(行索引和列名)进行定位。
  • 支持单个元素、多元素(通过列表或切片)及条件筛选赋值。
  • 如果索引或列名不存在,赋值操作会扩展 DataFrame(新增行或列)。

示例

# 单个元素赋值
df.loc['row1', 'col1'] = 5

# 多元素赋值(需形状匹配)
df.loc[['row1', 'row2'], ['col1', 'col2']] = [[1, 2], [3, 4]]

# 条件赋值
df.loc[df['col1'] > 10, 'col2'] = 100

优点

  • 灵活性高,支持复杂操作(如多元素、条件过滤)。
  • 直接扩展 DataFrame 结构(新增行/列)。

缺点

  • 对单个元素赋值时性能略低于 .at[]

2. 使用 df.at[] 方法

语法df.at[index, column] = value

特点

  • 专为单个元素的高效赋值设计。
  • 仅支持精确的索引和列名,不支持多元素或条件筛选。

示例

df.at['row1', 'col1'] = 5

优点

  • 执行速度比 .loc[] 更快(尤其在循环中赋值时)。

缺点

  • 仅适用于单个元素,功能单一。

3. 链式索引(不推荐)

语法df[column][index] = value

特点

  • 通过列名选择列,再通过索引选择行。
  • 可能触发 SettingWithCopyWarning 警告,赋值可能失败。

示例

# 不推荐!可能导致不可预测的行为
df['col1']['row1'] = 5

缺点

  • 容易因链式操作导致歧义,pandas 无法保证操作的是原数据还是副本。
  • 官方明确不推荐此方法。

对比总结

方法 适用场景 性能 灵活性 扩展性(新增行/列) 安全性
.loc[] 单/多元素、条件赋值、批量操作 一般 支持
.at[] 单个元素赋值 不支持
链式索引 一般 不支持

使用建议

  1. 单元素赋值:优先使用 .at[],尤其在大数据量或循环中。
  2. 多元素或条件赋值:必须使用 .loc[]
  3. 避免链式索引:确保代码可维护性和数据操作的安全性。
文末声明:

您必须遵守关于,您可以随意转发/引用,但要注明原作者Leon或设置本文跳转连接,并且您必须在文中包含或提醒浏览者遵守作者声明
欢迎关注公众号获取第二手文章!高效工作法

暂无评论

发送评论 编辑评论


				
上一篇