Python:如何按Pandas中的数据类型过滤数据帧?

2024-06-17 12:28:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像这样的DataFrame

df = pd.DataFrame([
    ['A1', ['Long Sleeves', 'Jacket'], 85],
    ['B1', 'Shoes', 55],
    ['A2', 'Skirt', 40]
], columns=['PRDS_ID', 'CAT', 'PRICE'])

我想从“CAT”列中选择类型为list的行。
因此,我尝试了以下代码

df[df.CAT.astype(list) == True]
df['CAT'].apply(lambda x: len(x) > 1)

但他们两人都没有成功。在这种情况下,应返回第一行。我怎样才能修好它


Tags: columnsa2dataframedfa1longlistb1
3条回答

这就是你的意思吗

df['CAT'].apply(lambda x: x if isinstance(x, list) else None)

0    [Long Sleeves, Jacket]
1                      None
2                      None
Name: CAT, dtype: object

熊猫细胞没有istype方法;这适用于Python基本对象和其他实现操作符的对象。相反,您必须将检查封装在lambda函数中,该函数应用于每个单元格的内容:引用单元格中的Python对象,并测试

>>> df[df.iloc[:,1].map(lambda x: type(x) == list)]
  PRDS_ID                     CAT  PRICE
0      A1  [Long Sleeves, Jacket]     85
>>> df[df.iloc[:,1].map(lambda x: type(x) == str)]
  PRDS_ID    CAT  PRICE
1      B1  Shoes     55
2      A2  Skirt     40

您也可以使用类似apply

df[df.CAT.apply(type) == list]
  PRDS_ID                     CAT  PRICE
0      A1  [Long Sleeves, Jacket]     85
  • df.CAT.apply(type)将为您提供每行的Series对象类型
  • 通过比较df.CAT.apply(type) == list,我们可以得到布尔值来进行索引

相关问题 更多 >