如何向包含静态预定义列表的现有 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]
我有一个现有的数据框和一个单独的字符串列表。我想将字符串列表作为附加列添加到数据框中。我希望列表在每一行中都相同。初始数据框是根据现有 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]