我从csv文件中提取一列,并使用pandas将其中的数据输入到数组中。但是,许多单元格是空的,并在数组中保存为'nan‘。我想要么识别空单元格以便跳过它们,要么在之后将它们从数组中全部删除。类似于下面的伪代码:
if df.row(column number) == nan
skip
或
if df.row(column number) != nan
do stuff
基本上,我如何识别csv文件中的单元格是否为空。
发布于 2018-10-01 19:12:52
最好的做法是在加载NaN
行后,通过索引将其删除:
df = df[df['column_to_check'].notnull()]
例如,为了去除在以下数据框的第3列中找到的NaN
值:
>>> df
0 1 2 3 4
0 1.0 1.0 NaN 1.0 1.0
1 1.0 NaN 1.0 1.0 1.0
2 NaN NaN NaN NaN NaN
3 NaN 1.0 1.0 NaN NaN
4 1.0 NaN NaN 1.0 1.0
>>> df[df[3].notnull()]
0 1 2 3 4
0 1.0 1.0 NaN 1.0 1.0
1 1.0 NaN 1.0 1.0 1.0
4 1.0 NaN NaN 1.0 1.0
发布于 2018-10-01 19:15:21
如果按照上面代码中的建议逐行遍历DataFrame并按列索引,则pd.isnull()
和pd.notnull()
是检查单个null值的标准方法。然后,您可以使用此表达式对该值执行任何您喜欢的操作。
示例:
import pandas as pd
import numpy as np
a = np.nan
pd.isnull(a)
Out[4]: True
pd.notnull(a)
Out[5]: False
如果您想要操作DataFrame中的所有(或某些) NaN值,那么在处理表格数据时,处理丢失的数据是一个很大的主题,有很多方法可以做到这一点。我推荐this book的第7章。以下是它的内容:
第一部分与您的问题最为相关。
发布于 2018-10-01 19:35:41
如果只想排除缺少的值,可以使用pd.DataFrame.dropna()
下面是一个基于@sacul描述的示例:
>>> import pandas as pd
>>> df
0 1 2 3 4
0 0.0 1.0 NaN 1.0 1.0
1 1.0 NaN 1.0 1.0 1.0
2 NaN NaN NaN NaN NaN
3 NaN 1.0 1.0 NaN NaN
4 1.0 NaN NaN 1.0 1.0
>>> df.dropna(axis=0, subset=['3'])
0 1 2 3 4
0 0.0 1.0 NaN 1.0 1.0
1 1.0 NaN 1.0 1.0 1.0
4 1.0 NaN NaN 1.0 1.0
axis=0
表示包含excluded.subset=['3']
的行是NaN
,表示只考虑列“3”。有关详细信息,请参阅上面的链接。
https://stackoverflow.com/questions/52597414
复制相似问题