【问题标题】:How to filter a Pandas series?如何过滤熊猫系列?
【发布时间】:2019-04-04 15:44:00
【问题描述】:

我想过滤 Pandas 系列以删除某些值。这似乎是一项简单的任务,但same question 的首选答案对我不起作用。

这是我的可重现示例:

data = np.array([['','Col1','Col2'],
                ['Row1',1,2],
                ['Row2',3,4]])

myDF = pd.DataFrame(data=data[1:,1:],
                  index=data[1:,0],
                  columns=data[0,1:])

mySeries = myDF.loc[:, "Col1"]
mySeries[mySeries != 1]

我希望最后一行输出包含值 3 的单行,但我得到的是:

Row1    1
Row2    3
Name: Col1, dtype: object

我做错了什么?

【问题讨论】:

    标签: python pandas numpy series


    【解决方案1】:

    考虑您正在创建的 NumPy 数组的 dtype:

    data = np.array([['','Col1','Col2'],
                     ['Row1',1,2],
                     ['Row2',3,4]])
    
    print(data)
    
    array([['', 'Col1', 'Col2'],
           ['Row1', '1', '2'],
           ['Row2', '3', '4']], 
          dtype='<U4')
    

    在提供给np.array 之前在嵌套列表中组合字符串和整数会创建一个字符串数组,由'&lt;U4' 证明,它表示最大字符数。

    如果您改用列表,则不会遇到此问题,因为实现会确保创建具有适当类型的数组:

    data = [['','Col1','Col2'],
            ['Row1',1,2],
            ['Row2',3,4]]
    
    myDF = pd.DataFrame(data=[i[1:] for i in data[1:]],
                        index=[i[0] for i in data[1:]],
                        columns=data[0][1:])
    

    【讨论】:

      【解决方案2】:

      您的Series 包含字符串。

      >>> mySeries.tolist()
      >>> ['1', '3']
      

      你可以使用

      >>> mySeries[mySeries != '1']
      >>> 
      Row2    3
      Name: Col1, dtype: object
      

      发生这种情况是因为numpy 数组拥有单一数据类型,因此当您创建data 时整数被转换为字符串。

      如果你想要整数,你可以使用

      >>> mySeries = mySeries.astype(int)
      >>> mySeries
      >>> 
      Row1    1
      Row2    3
      Name: Col1, dtype: int64
      

      您的原始代码可以正常工作。

      【讨论】:

        【解决方案3】:
        mySeries = mySeries.astype(int)
        mySeries.loc[mySeries != 1]
        

        【讨论】:

          【解决方案4】:
          mySeries = pd.to_numeric(mySeries)
          

          ..这将解决它

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-10-03
            • 2022-08-17
            • 2023-02-02
            • 2014-09-22
            • 2019-08-22
            相关资源
            最近更新 更多