DataFrame 列:仅显示非数字值

问题描述 投票:0回答:1

考虑:

  1. 我们有一个 Pandas DataFrame。
  2. 此 DataFrame 有一列只能用浮点数填充。
  3. 但是,数据类型是“object”,这意味着其中至少有一个非数字值。
  4. 我想查看这个/这些非数字值,以便我可以决定如何继续。

问题:如何以仅返回非数字单元格的方式过滤此列?

代码示例:

url = ('https://ml-repository-krakers.s3-eu-west-1.amazonaws.com/','kaggle+/churn_modelling/Telco-Customer-Churn.csv')
df = pd.read_csv(url)
df['TotalCharges'][ df['TotalCharges'] == ' ' ]

可以看出,数据集的列上有空格,该列应该是浮动的。

注意这个问题的前提是我们还不知道只有这些非浮点值。我们不知道其中有多少个或哪些非浮点值。

python pandas
1个回答
1
投票

您的

TotalCharges
列仅包含字符串,其中一些代表浮点数。因此,您需要找到具有不代表浮点数的值的行。

为此,您需要通过尝试将值转换为数字来形成掩码。在下面的代码中

to_numeric
尝试进行此转换,并且由于
coerce
给出了 NaN 值,而这是不可能的。掩模是通过测试这些 Nan 值而形成的。然后可以使用此掩码仅选择这些行:

import pandas as pd

url = ('https://ml-repository-krakers.s3-eu-west-1.amazonaws.com/'
        'kaggle+/churn_modelling/Telco-Customer-Churn.csv')
df = pd.read_csv(url)


mask = pd.to_numeric(df['TotalCharges'], errors = 'coerce').isna()
df2 = df[mask]

print(df2)

给出:

      customerID  gender  SeniorCitizen  ... MonthlyCharges TotalCharges  Churn
488   4472-LVYGI  Female              0  ...          52.55                  No
753   3115-CZMZD    Male              0  ...          20.25                  No
936   5709-LVOEQ  Female              0  ...          80.85                  No
1082  4367-NUYAO    Male              0  ...          25.75                  No
1340  1371-DWPAZ  Female              0  ...          56.05                  No
3331  7644-OMVMY    Male              0  ...          19.85                  No
3826  3213-VVOLG    Male              0  ...          25.35                  No
4380  2520-SGTTA  Female              0  ...          20.00                  No
5218  2923-ARZLG    Male              0  ...          19.70                  No
6670  4075-WKNIU  Female              0  ...          73.35                  No
6754  2775-SEFEE    Male              0  ...          61.90                  No

[11 rows x 21 columns]
© www.soinside.com 2019 - 2024. All rights reserved.