繁体   English   中英

不能在 Pandas 中使用 dropna 删除 NAN

[英]Can't drop NAN with dropna in 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。 这是怎么来的? 我现在很疯狂。

您需要阅读文档(重点添加):

返回在给定轴上带有标签的对象被省略

dropna返回一个新的DataFrame。 如果您希望它修改现有的 DataFrame,您所要做的就是在文档中进一步阅读:

就地:布尔值,默认为 False

如果为 True,就地执行操作并返回 None。

因此,要就地修改它,请执行traindataset.dropna(how='any', inplace=True)

pd.DataFrame.dropna默认使用pd.DataFrame.dropna inplace=False 这是大多数Pandas 操作的规范; 例外确实存在,例如update

因此,您必须要么分配回您的变量,要么明确声明inplace=True

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

在风格上,前者通常是首选,因为它支持运算符链接,而后者通常不会产生任何或显着的性能优势

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

例如,如果您想从列countryvariety数据框评论中选择非null值:

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

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

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

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

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 中的数据并转换其数据类型之前,首先删除空白值。

暂无
暂无

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

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