我将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。那怎么样?我现在很疯狂。
答案 0 :(得分:12)
您需要阅读the documentation(强调添加):
返回对象,省略了给定轴上的标签
dropna
返回 新 DataFrame。如果您希望它修改现有的DataFrame,您只需在文档中进一步阅读:
inplace :布尔值,默认为False
如果为True,请执行inplace并返回None。
因此,要对其进行修改,请执行traindataset.dropna(how='any', inplace=True)
。
答案 1 :(得分:2)
或者,您也可以使用notnull()
方法选择不是null
的行。
例如,如果您要从数据框评论的列null
和country
中选择非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数据并转换其数据类型之前,请先删除空白值。