我已经问了一次这个问题,但删除了它,因为它没有以正确的方式解决问题。
我想删除包含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()不会产生任何结果。所以任何人都有任何建议可能是它不起作用的原因吗?
答案 0 :(得分:3)
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')
。)