查找数据框中的列是否既没有nan也没有

时间:2018-07-27 23:05:16

标签: python pandas

我浏览了网站上的所有帖子,无法找到解决我问题的方法。

我有一个包含15列的数据框。其中一些带有NoneNaN值。我在编写if-else条件时需要帮助。

如果数据框中的列不为null和nan,则需要格式化datetime列。当前代码如下

for index, row in df_with_job_name.iterrows():
    start_time=df_with_job_name.loc[index,'startTime']
    if not df_with_job_name.isna(df_with_job_name.loc[index,'startTime']) :
        start_time_formatted =
            datetime(*map(int, re.split('[^\d]', start_time)[:-1]))

我得到的错误是

if not df_with_job_name.isna(df_with_job_name.loc[index,'startTime']) :
TypeError: isna() takes exactly 1 argument (2 given)

2 个答案:

答案 0 :(得分:0)

isna将整个数据框作为实例参数(如果您已经熟悉类,则为self),并返回布尔值True的数据框,其中值无效。您试图将要检查的单个值指定为第二个输入参数。 isna不能这样工作;通话中会包含空括号。

您有两种选择。一种是遵循个别检查策略here。另一种方法是制作整个数据框的地图并使用:

null_map_df = df_with_job_name.isna()

for index, row in df_with_job_name.iterrows() :
    if not null_map_df.loc[index,row]) :
        start_time=df_with_job_name.loc[index,'startTime']
        start_time_formatted =
            datetime(*map(int, re.split('[^\d]', start_time)[:-1]))

请检查我对行和列索引的使用情况; index, row处理看起来不正确。另外,您应该能够一次将any操作应用于整个行。

答案 1 :(得分:0)

处理丢失/无效值的直接方法可能是:

def is_valid(val):
    if val is None:
       return False
    try:
       return not math.isnan(val)
    except TypeError:
       return True

,当然,您必须导入math

另外,似乎isna没有被任何参数调用,并且返回了布尔值的数据帧(请参见link)。您可以遍历两个数据框以确定该值是否有效。