首页 > 解决方案 > 在尝试附加数据帧时在 for 循环期间获取 NaN 值

问题描述

我试图通过运行返回字典的函数 isValid(s) 来解析并将数据添加到现有数据帧:

combo.update({"is_valid": isValid, "total_tests": ttl, "positive": pos, "negative": neg})
return combo

然后创建一个空白数据框,将该数据框附加到字典中,然后将该数据框与先前的现有数据框连接起来。这是我的代码:

def CleanCovidTest(df_test):
s = 0
df_add = pd.DataFrame()
for value in isValidString(df_test.testresults.iloc[s]):
    result = isValidString(df_test.testresults.iloc[s]) 
    df_add = df_add.append(result, ignore_index = True)                     
    s += 1
df_test = pd.concat([df_test, df_add], axis = 1)
return df_test

此代码成功为数据帧的前 4 行添加值,但随后仅返回 NaN 值:

index clinic      date          testresults  ...  negative positive  total_tests
0     1001  5/6/2020               R4-3+1  ...       3.0      1.0          4.0
1     1002  5/6/2020             R14-2+12  ...       2.0     12.0         14.0
2     1003  5/6/2020  R5-3+2R7+7-0R11+4-7  ...      10.0     13.0         23.0
3     1004  5/6/2020        R10-8+2R7+7-0  ...       8.0      9.0         17.0
4     1005  5/6/2020   R5-3+2R9+7-2R1+0-1  ...       NaN      NaN          NaN
...
95    1096  5/6/2020         R4-3+1R6-3+3  ...       NaN      NaN          NaN
96    1097  5/6/2020         R9-3+6R7+7-0  ...       NaN      NaN          NaN

关于可能导致这种情况的任何想法?pd.DataFrame(result, index = [s])我还尝试使用df_add创建另一个新数据框并将其附加到这个新数据框,但我得到了完全相同的结果。

标签: pythonpandasdataframe

解决方案


你的循环有问题:

s = 0
df_add = pd.DataFrame()
for value in isValidString(df_test.testresults.iloc[s]):
    result = isValidString(df_test.testresults.iloc[s]) 
    df_add = df_add.append(result, ignore_index = True)                     
    s += 1

变量value仅循环isValidString(顺便说一句,可怕的函数名称) for的结果s==0,然后循环停止。

你的代码太混乱了,无法给出解决方案,但看看这个变化,也许你会得到启发:

for s in range(len(df_test)):
    for value in isValidString(df_test.testresults.iloc[s]):
        df_add.append(value, ignore_index=True)

推荐阅读