如何向包含静态预定义列表的现有 pandas 数据框添加列?

How can I add a column to an existing pandas dataframe that consists of a static, predefined list?

我有一个现有的数据框和一个单独的字符串列表。我想将字符串列表作为附加列添加到数据框中。我希望列表在每一行中都相同。初始数据框是根据现有 excel 文档创建的。

我尝试使用带有值参数的插入函数作为定义的列表,但我 return 出错了 - "ValueError: Length of values does not match length of index"。

df1 = pd.DataFrame({'a': ['a','b','c'], 'b': ['d','e','f']})

testList = ['aa','bb','cc','dd']

#this is not working and returning an error
#dftest = df1.insert(2,"testList",testList)

#this is the resulting dataframe that I want
dfResult = pd.DataFrame({'a': ['a','b','c'], 'b': ['d','e','f'], 'addedList': [['aa','bb','cc'],['aa','bb','cc'],['aa','bb','cc']]})

dfResult

我想要一个额外的列,其中每一行都填充了相同的列表,如 dfResult 中所示。

您可以创建一个包含数据框长度的列表并将其分配给列

df1['addedList']=[testList]*df1.shape[0]
df
    a   b   addedList
0   a   d   [aa, bb, cc]
1   b   e   [aa, bb, cc]
2   c   f   [aa, bb, cc]

请注意,如果您计划在事后单独编辑这些列表,则应改用@wenyoben 的回答:

df1['addedList']=[['aa', 'bb', 'cc'] for x in range(len(df1))]

提供相同的时间复杂度,而不会产生指向原始列表而不是唯一列表对象的问题

我会推荐

df1['addedList']=[['aa', 'bb', 'cc'] for x in range(len(df1))]
df1
Out[156]: 
   a  b     addedList
0  a  d  [aa, bb, cc]
1  b  e  [aa, bb, cc]
2  c  f  [aa, bb, cc]

原因如下:如果我们通过相同的副本创建列,当我们更改单个值时,所有其他值都会更改。

df1['addedList']=[testList]*df1.shape[0]
df1['addedList1']=[['aa', 'bb', 'cc'] for x in range(len(df1))]


df1.addedList[0][0]=11111
df1
Out[162]: 
   a  b            addedList    addedList1
0  a  d  [11111, bb, cc, dd]  [aa, bb, cc]
1  b  e  [11111, bb, cc, dd]  [aa, bb, cc]
2  c  f  [11111, bb, cc, dd]  [aa, bb, cc]
df1.addedList1[0][0]=11111
df1
Out[164]: 
   a  b            addedList       addedList1
0  a  d  [11111, bb, cc, dd]  [11111, bb, cc]
1  b  e  [11111, bb, cc, dd]     [aa, bb, cc]
2  c  f  [11111, bb, cc, dd]     [aa, bb, cc]