大熊猫不能用滴管滴下NAN

fan*_*ngh 4 python missing-data dataframe pandas

我将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
Run Code Online (Sandbox Code Playgroud)

产量

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]
Run Code Online (Sandbox Code Playgroud)

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

Bre*_*arn 16

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

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

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

inplace:布尔值,默认为False

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

所以要在适当的位置修改它,做traindataset.dropna(how='any', inplace=True).


jpp*_*jpp 13

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

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

df = df.dropna(how='any')           # assign back
df.dropna(how='any', inplace=True)  # set inplace parameter
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

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

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
Run Code Online (Sandbox Code Playgroud)

将整个数据帧转换为字符串后,我使用了该dropna()函数。之前的值NaN(被 pandas 视为 null 值)被转换为 string 'nan'

总之,在开始操作 CSV 中的数据并转换其数据类型之前,请先删除空白值。


小智 5

或者,您也可以使用notnull()method 选择不是null.

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

answer=reviews.loc[(reviews.country.notnull()) & (reviews.variety.notnull())]
Run Code Online (Sandbox Code Playgroud)

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