首页 > 解决方案 > 数据框上的dropna(),为什么行数低于预期?

问题描述

我有一个数据框,其中大多数列都有 10866 个非空值,除了几列较少。具有最少数量的非空值的列是“关键字”(9373)。因此,当我从 Dataframe 中删除 NA 值时,我希望每列的非空值的数量等于非空值最少的列中的非空值的数量;在这种情况下,“关键字”。

但是,当我申请时df.dropna(inplace = True),每列中非空值的数量减少到以前甚至不包含在 Dataframe 中的数量:8665,甚至在包含最少非空值的“关键字”列中.

这怎么可能?8665这个数字是怎么来的?

这是原始数据框的样子:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10866 entries, 0 to 10865
Data columns (total 19 columns):
id                      10866 non-null int64
imdb_id                 10856 non-null object
popularity              10866 non-null float64
budget                  10866 non-null int64
revenue                 10866 non-null int64
original_title          10866 non-null object
cast                    10790 non-null object
director                10822 non-null object
keywords                9373 non-null object
overview                10862 non-null object
runtime                 10866 non-null int64
genres                  10843 non-null object
production_companies    9836 non-null object
release_date            10866 non-null object
vote_count              10866 non-null int64
vote_average            10866 non-null float64
release_year            10866 non-null int64
budget_adj              10866 non-null float64
revenue_adj             10866 non-null float64
dtypes: float64(4), int64(6), object(9)
memory usage: 1.6+ MB

这是我删除 NA 后 Dataframe 的样子

df.dropna(inplace = True)

<class 'pandas.core.frame.DataFrame'>
Int64Index: 8665 entries, 0 to 10865
Data columns (total 19 columns):
id                      8665 non-null int64
imdb_id                 8665 non-null object
popularity              8665 non-null float64
budget                  8665 non-null int64
revenue                 8665 non-null int64
original_title          8665 non-null object
cast                    8665 non-null object
director                8665 non-null object
keywords                8665 non-null object
overview                8665 non-null object
runtime                 8665 non-null int64
genres                  8665 non-null object
production_companies    8665 non-null object
release_date            8665 non-null object
vote_count              8665 non-null int64
vote_average            8665 non-null float64
release_year            8665 non-null int64
budget_adj              8665 non-null float64
revenue_adj             8665 non-null float64
dtypes: float64(4), int64(6), object(9)
memory usage: 1.3+ MB

标签: pythonpandasdataframena

解决方案


考虑以下代码:

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {"name": ['A', 'B', 'C'],
    1: [1, 2, np.nan],
    2: [1, np.nan, 3], 
    3: [np.nan, 2, 3]})

print(df)
df.dropna(inplace=True)
print(df)

你认为数据框会是什么样子df.dropna?默认情况下pandas,将删除其中任何列具有空值的行。因此,即使每一列只有一个空值,所有三行都会被删除。how您可以使用函数的,threshsubset参数来更改此行为dropna
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html


推荐阅读