【问题标题】:how to replace zero-dimensional arrays in pandas dataframe?如何替换熊猫数据框中的零维数组?
【发布时间】:2021-07-01 20:19:46
【问题描述】:

我有一个看起来像这样的 pandas 数据框:

index array array2
1 ['group1'] ['group1, 'group3']
2 ['group1', 'group4] ['group1', 'group3']
3 [] ['group2', 'group3']
4 [] ['group2', 'group4']

如您所见,其中一些数组是零维的(具体来说:它们是

array([], dtype=object

)

现在,由于零维数组无法连接,我想将它们替换为 np.nans 以便可以连接它们。

如果我这样做了

data['array'].replace(np.array([]).astype(object), 0, inplace= True)

什么都没有发生!数据框保持不变,没有任何变化。 事实上,即使我手动操作:

data['array'].replace(data['array'][3], 0, inplace = True)

我的结果数据框根本没有改变...

那么我的问题是,我们如何创建一个函数来替换数据框中的所有这些零维数组以进行连接?

【问题讨论】:

  • replace做实验,看起来它可以匹配字符串和数字,但似乎不适用于列表或数组。您的数组具有形状 (0,),因此它实际上是 1d。对这样的数组(或任何数组)进行相等性测试很棘手。还要注意列表[] 和字符串"[] 显示与您的数组相同。

标签: python arrays pandas numpy


【解决方案1】:

你可以试试:

data['array'] = [x if len(x) else 0 for x in data['array']]

【讨论】:

    【解决方案2】:

    您可以访问它的长度进行屏蔽:

    >>> df.loc[df.array.str.len().eq(0), "array"] = np.nan
    >>> df
    
       index             array            array2
    0      1          [group1]  [group1, group3]
    1      2  [group1, group4]  [group1, group3]
    2      3               NaN  [group2, group3]
    3      4               NaN  [group2, group4]
    

    【讨论】:

      【解决方案3】:

      你也可以使用mask:

      data = data.mask(data.applymap(str).eq('[]'))
      

      或者你可以使用这个:

      data['array'] = data['array'].where(data['array'].str.len() > 2, np.nan)
      

         index             array            array2
      0      1          [group1]  [group1, group3]
      1      2  [group1, group4]  [group1, group3]
      2      3               NaN  [group2, group3]
      3      4               NaN  [group2, group4]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-19
        • 1970-01-01
        • 1970-01-01
        • 2018-09-29
        • 2020-12-31
        • 2019-02-02
        • 2023-03-12
        相关资源
        最近更新 更多