Skip to main content
 首页 » 编程设计

python之如何过滤 Pandas 系列

2025年05月04日12lori

我想过滤 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 

我做错了什么?

请您参考如下方法:

考虑您正在创建的 NumPy 数组的数据类型:

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 之前,在嵌套列表中组合字符串和整数创建一个字符串数组,由 '<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:])