大熊猫不能用滴管滴下NAN

时间:2015-11-11 03:34:08

标签: python pandas dataframe missing-data

我将pandas导入为pd并运行以下代码并获得以下结果

代码:

traindataset = pd.read_csv('/Users/train.csv')
print traindataset.dtypes
print traindataset.shape
print traindataset.iloc[25,3]
traindataset.dropna(how='any')
print traindataset.iloc[25,3]
print traindataset.shape

输出

TripType                   int64  
VisitNumber                int64  
Weekday                   object  
Upc                      float64  
ScanCount                  int64  
DepartmentDescription     object  
FinelineNumber           float64  
dtype: object

(647054, 7)

nan  
nan

(647054, 7) 
[Finished in 2.2s]

从结果中,dropna行不起作用,因为行号没有改变,并且数据帧中仍然有NAN。那怎么样?我现在很疯狂。

4 个答案:

答案 0 :(得分:12)

您需要阅读the documentation(强调添加):

  

返回对象,省略了给定轴上的标签

dropna 返回 DataFrame。如果您希望它修改现有的DataFrame,您只需在文档中进一步阅读:

  

inplace :布尔值,默认为False

     

如果为True,请执行inplace并返回None。

因此,要对其进行修改,请执行traindataset.dropna(how='any', inplace=True)

答案 1 :(得分:2)

或者,您也可以使用notnull()方法选择不是null的行。

例如,如果您要从数据框评论的列nullcountry中选择非variety值:

answer=reviews.loc[(reviews.country.notnull()) & (reviews.variety.notnull())]

但是这里我们只是选择相关数据;要删除null值,您应该使用dropna()方法。

答案 2 :(得分:2)

pd.DataFrame.dropna默认使用inplace=False。这是 most 熊猫行动的准则;确实存在例外情况update

因此,您必须为变量,状态明确分配inplace=True

df = df.dropna(how='any')           # assign back
df.dropna(how='any', inplace=True)  # set inplace parameter

通常,前者通常是首选,因为它支持运算符链接,而后者通常does not yield any or significant performance benefits

答案 3 :(得分:1)

这是我的第一篇文章。我只花了几个小时来调试这个确切的问题,我想分享我如何解决此问题。

我正在将整个数据框转换为字符串,然后使用类似于下面显示的代码将该值放回数据框:(请注意,下面的代码只会将值转换为字符串)

row_counter = 0
for ind, row in dataf.iterrows():
    cell_value = str(row['column_header'])
    dataf.loc[row_counter, 'column_header'] = cell_value
    row_counter += 1

将整个数据帧转换为字符串后,然后使用dropna()函数。以前为NaN的值(熊猫认为是空值)已转换为字符串'nan'

最后,在开始处理CSV数据并转换其数据类型之前,请先删除空白值。

相关问题