数据框上的dropna()是否会导致行数比预期的少?

时间:2019-09-02 20:34:03

标签: python pandas dataframe na

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

但是,当我应用df.dropna(inplace = True)时,每列中的非空值的数量将减少到以前甚至没有包含在数据框中的数量: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后数据框的外观

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

1 个答案:

答案 0 :(得分:3)

考虑以下代码:

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函数的threshsubsetdropna参数来更改此行为。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html

相关问题