[英]why I Can't drop NAN values with dropna() function in pandas
[英]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
的行。
例如,如果您想从列country
和variety
数据框评论中选择非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.