繁体   English   中英

为什么dropna()没有像我期望的那样工作?

[英]why dropna() is not working as I expect it to?

我已经问了一次这个问题,但删除了它,因为它没有以正确的方式解决问题。

我想删除包含NaN所有行。 我很确定我需要申请

df.dropna(how='all', inplace=True)

实现我的需要。 但由于某种未知的原因,它根本不起作用。 我甚至怀疑这是一个与软件/版本相关的问题。 我正在使用anaconda和pandas 0.18.0和conda版本的conda版本:4.1.2 conda-build版本:1.19.0 python版本:3.5.1.final.0请求版本:2.9.1

我从csv创建了一个数据框,其中包括:

df1 = pd.read_csv('Vols.csv', sep=',', parse_dates=True, 
index_col="Date",usecols=['Date','60DAY_IMPVOL'])
df2 = pd.read_csv('DAX02072016.csv', sep=',', index_col= "Date", parse_dates=True,
usecols=['Date','Close'])
df = pd.concat([df1, df2], axis=1)

我得到的是一个数据框:

         60DAY_IMPVOL        Close
Date
2004-02-03     NaN            4057.510010
2004-02-04     NaN            4028.370117
2004-02-05     NaN            4014.790039
2004-02-06     18.54          4044.989990
2004-02-09     17.76          4098.970215
2004-02-10     NaN            4077.635363

并且当我使用axis = 1或axis = 0时,应用dropna()不会产生任何结果。 所以任何人都有任何建议可能是它不起作用的原因?

how='all'并不意味着“删除包含NaN的所有行”,这意味着“删除所有 NaN的行”。 你想要how='any' ,这意味着“删除包含任何 NaN的行”。

>>> df.dropna(how='all')
            60DAY_IMPVOL        Close
Date                                 
2004-02-03           NaN  4057.510010
2004-02-04           NaN  4028.370117
2004-02-05           NaN  4014.790039
2004-02-06         18.54  4044.989990
2004-02-09         17.76  4098.970215
2004-02-10           NaN  4077.635363
>>> df.dropna(how='any')
            60DAY_IMPVOL        Close
Date                                 
2004-02-06         18.54  4044.989990
2004-02-09         17.76  4098.970215

how='any'实际上是默认值,所以说实话, df.dropna()也会有效。

(注意, inplace=True有点df = df.dropna(how='any') ,通常我们现在只写df = df.dropna(how='any') 。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM