我试图通过运行一个返回字典的函数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添加到这个新数据框中,但我得到了完全相同的结果。
你的循环有问题:
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
(顺便说一下,函数名很糟糕)对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)
<代码>代码>