我浏览了网站上的所有帖子,无法找到解决我问题的方法。
我有一个包含15列的数据框。其中一些带有None
或NaN
值。我在编写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)
答案 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)。您可以遍历两个数据框以确定该值是否有效。