当前位置: 首页 > 知识库问答 >
问题:

Pandas-根据子集中的数据类型选择列

萧渝
2023-03-14

在Pandas的数据框中,一些列是数字的,像浮动;一些是非数字的,像对象。我们希望删除那些数值列为NaN的行,但不删除那些非数值列为NaN的行。

例如,对于具有四列的df:a、B、C和D。a和C的数据类型为Object,B和D的数据类型为Float。

**A(Object)   B(Float)C(Object)   D(Float)**

Apple       NaN     String1     1.0
Orange      2.0     NaN         3.0
Banana      4.0     String2     5.0
NaN         1.0     String3     2.0
Pear        NaN     String4     3.0
Melon       2.0     String5     NaN

我们将只删除其中一些数字列(浮点数)为NaN的行,而不应该删除其中一些非数字列(对象)为NaN的行。

最终结果如下:

**A(Object)   B(Float)C(Object)   D(Float)**

Orange      2.0     NaN         3.0
Banana      4.0     String2     5.0
NaN         1.0     String3     2.0

我的步骤是:

  1. 检查哪些列的数据类型是数字的,比如Float:我们得到'B'和'D'列,因为它们的数据类型是Float;
  2. 使用子集通过dropna方法删除数字列中包含NaN的行。

以下是代码:

df = penguins.dropna(0, how='any', subset=['B','D'])

但是如果数字列的数量非常大,这段代码将会非常长,有时几乎是不可能的。

那么,如何根据子集=[]中的数据类型选择这些列呢?

我正在考虑lambda和管道,但我不太确定。

谢谢!

共有2个答案

夹谷野
2023-03-14

试试这个:

df = df[df['B'].notna()]
df = df[df['D'].notna()]
华星文
2023-03-14

您可以像这样使用选择类型

df[df.select_dtypes(include='number').notna().all(axis=1)]

输出:

        A    B        C    D
1  Orange  2.0      NaN  3.0
2  Banana  4.0  String2  5.0
3     NaN  1.0  String3  2.0
 类似资料:
  • 我想在指定的时间戳范围内从数据帧中选择行的子集。 下面是我所做的,但它似乎没有工作。我正在尝试选择发生在01/01/2019 01:00和01/01/2021 01:00之间的行子集。 非常感谢。

  • 问题内容: 我有一个模块(db.py),它从不同的数据库类型(sqlite,mysql等)加载数据。该模块包含一个db_loader类和从其继承的子类(sqlite_loader,mysql_loader)。 使用的数据库类型在单独的params文件中, 用户如何找回正确的物体? 即我该怎么做: 我是在db.py模块中使用一种称为loader的方法,还是有一种更优雅的方式使类可以根据参数选择自己的

  • 问题内容: 从pandas数据框中选择所有行的最简单方法是什么?谁的符号在整个表中恰好出现两次?例如,在下表中,我想选择在[‘b’,’e’]中带有sym的所有行,因为这些符号的value_counts等于2。 问题答案: 我认为您可以按列和值使用: 第二个解决方案使用与布尔索引: 并用最快的解决方案和:

  • 主要内容:数值类型,日期和时间类型,字符串类型,二进制类型MySQL 提供了大量的数据类型,为了优化存储和提高数据库性能,在任何情况下都应该使用最精确的数据类型。   前面主要对 MySQL 中的数据类型及其基本特性进行了描述,包括它们能够存放的值的类型和占用空间等。本节主要讨论创建数据库表时如何选择数据类型。   可以说字符串类型是通用的数据类型,任何内容都可以保存在字符串中,数字和日期都可以表示成字符串形式。   但是也不能把所有的列都定义为字符串类

  • 这不是一个重复的问题,但类似于 根据pandas中列中的值从数据帧中选择行

  • 问题内容: 如果在表的一列中,我希望这些值是“是”,“否”或“可选”,那么我需要使用哪种数据类型? 问题答案: 少量: 占用1个字节,但是最多可以将8个BIT字段合并到SQL Server中的单个BYTE中。 存储以下两个值之一:1(表示true)和0(表示false),因此该列需要为可空值,以便NULL作为您的第三个值传递 CHAR(1) 需要1个字节 如果不区分大小写ASCII,则为26个字符