【问题标题】:Set Pandas column values to an array将 Pandas 列值设置为数组
【发布时间】:2019-05-03 16:43:14
【问题描述】:

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

   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。我该如何解决这个问题?

【问题讨论】:

    标签: python arrays pandas dataframe series


    【解决方案1】:

    不推荐您尝试的内容。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):

    不要这样做。 Pandas 从来没有被设计成以系列/列的形式保存列表。您可以炮制昂贵的解决方法,但这些不是 推荐。

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

    另见What are the advantages of NumPy over regular Python lists? 支持 Pandas 的论点与支持 NumPy 的论点相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      相关资源
      最近更新 更多