如何为Pandas DataFrame新增每行均为相同列表的列?
在Pandas DataFrame中添加每行都是同一列表的新列
嘿,这个问题我熟!你遇到的是Pandas赋值时的广播逻辑问题——直接把列表赋值给新列的话,Pandas会默认把列表拆成单个元素去匹配每行,而不是把整个列表作为每个单元格的值。想要实现你要的效果,有几种简单的方法:
方法1:重复列表生成新列
最直接的方式是生成一个包含len(df)个目标列表的新列表,再赋值给新列:
import pandas as pd df = pd.DataFrame(data={"A": [1, 2, 3], "B": ["x", "y", "z"]}) list_ = [1,2,3] # 生成和DataFrame行数一致的列表,每个元素都是目标列表 df['new_col'] = [list_] * len(df)
运行后就能得到你想要的结果:
A B new_col 0 1 x [1, 2, 3] 1 2 y [1, 2, 3] 2 3 z [1, 2, 3]
方法2:用pd.Series构造列
也可以用pd.Series直接构造这个新列,逻辑和方法1一致:
df['new_col'] = pd.Series([list_] * len(df))
注意:列表引用 vs 独立副本
上面两种方法中,新列的所有单元格都指向同一个列表对象。如果之后你修改这个列表(比如list_.append(4)),所有单元格的内容都会跟着变。如果需要每个单元格的列表是独立的副本,不会互相影响,可以用列表推导式生成副本:
df['new_col'] = [list_.copy() for _ in df.index]
这样修改其中一个单元格的列表时,其他单元格不会受到影响。
内容的提问来源于stack exchange,提问作者jam
相关产品推荐
相关产品推荐

