将Pandas列值设置为数组

时间:2018-12-01 23:26:42

标签: python arrays pandas dataframe series

我有以下问题: 我有一个像这样的数据框:

   col1   col2   col3
0   2       5      4
1   4       3      5
2   6       2      7 

现在我有一个数组,例如a = [5,5,5],我想将此数组插入col3中,但只插入特定的行中(比如0和2),并获得类似的结果:

   col1   col2   col3
0   2       5    [5,5,5]
1   4       3      5
2   6       2    [5,5,5]

问题是,当我尝试这样做时:

 zip_df.at[[0,2],'col3'] = a 

我收到以下错误ValueError: Must have equal len keys and value when setting with an ndarray。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

不建议您尝试使用什么。 1 Pandas并非旨在容纳一系列列表。话虽如此,您可以显式定义一个系列并通过updateloc进行分配。注意at仅用于获取或设置单个值,而不是您遇到的多个值。

a = [5, 5, 5]
indices = [0, 2]

df['col3'].update(pd.Series([a]*len(indices), index=indices))

# alternative:
# df.loc[indices, 'col3'] = pd.Series([a]*len(indices), index=indices)

print(df)

   col1  col2       col3
0     2     5  [5, 5, 5]
1     4     3          5
2     6     2  [5, 5, 5]

1 有关更多信息(source):

  

不要这样做。熊猫从来没有被设计成容纳系列/专栏的列表。您可以炮制昂贵的解决方法,但这不是   推荐。

     

不推荐连续举牌的主要原因是输了   使用连续内存块中保存的NumPy数组的矢量化功能。您的系列将是   object dtype,它表示一系列指针,与list类似。你会输的   在内存和性能以及访问优化的Pandas方法方面都有好处。

     

另请参阅What are the advantages of NumPy over regular Python lists?   支持熊猫的论点与针对NumPy的论点相同。