【问题标题】:Set all the values in multiple columns to empty lists pandas将多列中的所有值设置为空列表熊猫
【发布时间】:2021-12-07 04:46:59
【问题描述】:

我有一个数据框,其列中有列表或值;类似于以下内容:

df
     A        B        C      D
0   []      [3]    ['ON']     5
1   'a'   ['a']    ['ON']     5
2    5      [3]    ['ON']     5
3   []      [3]    ['ON']     5
...

我想用空列表替换 ABC 列中的所有值。我尝试将.assign(column_name='value') 分别用于ABC 列。我可以设置一个值,但我不能设置一个空列表。我不想使用.apply(lambda x: []),因为它很慢。

还有其他方法吗?

预期结果:

df
     A    B    C    D
0   []   []   []    5
1   []   []   []    5
2   []   []   []    5
3   []   []   []    5
...

我基本上需要一个可以做的熊猫功能:change everything in columns=['A','B','C'] to []

【问题讨论】:

  • 尝试检查numpy.emptyThis 此处的链接应该会有所帮助。 df['A'] = np.empty((len(df), 0)).tolist() 应该适用于 A 列,同样适用于您希望将其应用到的其他列。

标签: python pandas replace assign


【解决方案1】:

你可以使用:

df['A'] = [[]]*len(df)

【讨论】:

    【解决方案2】:

    尝试使用列表理解设置列。

    例如

    empty_col = [[] for x in range(len(df))]
    df['A'] = empty_col
    df['B'] = empty_col
    df['C'] = empty_col
    
    >>> df
             A    B    C    D
        0   []   []   []    5
        1   []   []   []    5
        2   []   []   []    5
        3   []   []   []    5
    ...     
    
    

    【讨论】:

      【解决方案3】:
      df['A'] = [np.empty(0,dtype=float)]*len(df)
      df['B'] = [np.empty(0,dtype=float)]*len(df)
      df['C'] = [np.empty(0,dtype=float)]*len(df)
      

      性能对比:

      对于种子数据:

      df = pd.DataFrame(columns=['A'])
      for i in range(100):
          df = df.append({'A': i}, ignore_index=True)
      df
      

      1000 个元素: 396 µs 与 613 µs

      10 000 个元素: 1.06 毫秒 vs 4.33 毫秒

      使用 100 000 个元素: 8.87 毫秒 vs 45.9 毫秒

      【讨论】:

      • 如果您与接受的答案进行比较,并显示np.empty[[]]*len(df) 快,那么我会接受这个。因为为此我需要导入 numpy
      • @oakca - 完成,该答案首先发布:)
      • 因为基准,我接受了这个
      猜你喜欢
      • 2019-03-04
      • 2020-08-23
      • 2020-12-28
      • 2020-06-05
      • 1970-01-01
      • 2021-10-10
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多