如何使用包含dtype列表的pandas系列选择特定条件的值?

问题描述

我实际上知道很多方法可以在 Pandas Dataframe 和 Series 中使用像 float 这样的 dtype,但是如何使它与包含 dtype list 的 Series 一起使用?

例如,我想:

series = pd.Series([[1,2],[2,3,4],[4,6]])

series 就像:

0    [1,2]
1    [2,4]
2    [4,6]
dtype: object

我想要长度大于 2 的行,这实际上是行 1。我试过了:

series[len(series) > 2]

series[series.apply(lambda x : len(x) > 1)]

两者都不起作用。

解决方法

列表列支持 .str 访问器方法,因为它们本质上是对象。试试

series[series.str.len() > 2]
 
1    [2,3,4]
dtype: object

如果需要满足条件的行的索引值,我们改为过滤索引:

series.index[series.str.len() > 2]
# Int64Index([1],dtype='int64')

或者,如果您想删除长度大于 2 的行,您可以使用布尔索引来过滤:

series[series.str.len() <= 2]

0    [1,2]
2    [4,6]
dtype: object

请注意,您的第一个解决方案没有意义,因为条件是标量,但除非您的列也有 NaN,len(x) > 2 解决方案可以正常处理,否则您的应用代码将适用于 .str .

,

enter image description here 系列主要用于 str 因为访问器方法。这就是 str 在系列中使用的原因

series[series.apply(lambda x :len(x) > 2)][enter image description here][1]