我有以下问题: 我有一个像这样的数据框:
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
。我该如何解决这个问题?
答案 0 :(得分:4)
不建议您尝试使用什么。 1 Pandas并非旨在容纳一系列列表。话虽如此,您可以显式定义一个系列并通过update
或loc
进行分配。注意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的论点相同。