【发布时间】:2018-03-05 22:09:57
【问题描述】:
我的流程图如上图所示,我想从原始数据集中取出 2 行,然后将它们导入另一个(因为我不想修改原始数据)。在新的数据集中,检查2行是否有相同数量的非NaN值(df.iloc[i,:].count()),如果不一样,将数量差补零,然后继续执行操作。
示例: 原始数据:
3 5 5 NaN NaN NaN
1 4 7 5 NaN NaN
NaN NaN 3 6 7 NaN
NaN 3 8 4 11 NaN
3 0 3 7 2 1
取 2 行 i 和 i+1 并将它们导入另一个数据集:
3 5 5 NaN NaN NaN
1 4 7 5 NaN NaN
因为df.iloc[i+1,:].count() != df.iloc[i,:].count(),所以NaN值多的那一行必须这样填充:
3 5 5 0 NaN NaN
1 4 7 5 NaN NaN
如果是第 3 行和第 4 行
NaN 0 3 6 7 NaN
NaN 3 8 4 11 NaN
然后执行操作。
这是我的代码:
for i in range():
process[1,:] = df.iloc[i,:]
process[2,:] = df.iloc[i+1,:]
while True:
if process[1,:].count() == process[2,:].count():
break
else:
if process[1,:].count() > process[2,:].count():
process[2,:] = process[2,:].fillna(value = 0, limit = process[1,:].count() - process[2,:].count())
else:
process[2,:] = process[2,:].fillna(value = 0, limit = process[2,:].count() - process[1,:].count())
A[i,:] = stats.ttest_rel(process[1,:].values, process[2,:].values) #this line is just for the statistical test, you can ignore it
i += 1
我的算法不起作用,我觉得他们一遍又一遍地检查它们有点太笨拙了。
欢迎大家提出建议和指正,非常感谢。
P/s:我想连续对每一行进行统计检验,所以在这样做之前,我需要使它们具有相等数量的非 NaN 值。
【问题讨论】:
-
第三和第四行呢?
-
因为这只是我算法的一小部分,我不想包含太多与问题没有直接关系的东西。在执行完后面的操作后,会有一个循环不断比较它们的长度并进行处理。
-
对于您的代码中有许多无法回答的问题...为什么
j+=1和i+=1在那里,为什么j 有一个循环,它从未使用过。A是什么?一个列表?一个 numpy 数组。请阅读minimal reproducible example 并改写这个问题。目前无法回答 -
我已经编辑了我的代码。谢谢你的建议。
标签: python pandas for-loop while-loop