2016-07-02 149 views
1

我已经问了这个问题一次,但删除了它,因为它没有以正确的方式解决问题。为什么dropna()不能像我期望的那样工作?

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

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

实现我所需要的。但由于某些未知的原因,它根本行不通。我甚至怀疑它是软件/版本相关的问题。 4.1.2 畅达-Build版本:我与蟒蛇和熊猫和0.18.0版本畅达版本畅达工作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 

和应用dropna()不会做任何事情,也当我使用轴= 1或轴= 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')这些天。)

+0

千恩万谢@DSM,它只是一个有点尴尬有一个发布这样的问题,当我看在答案;) –

相关问题