我正在尝试删除Pandas数据框中所有两列中都不为零的行。我的数据帧的索引从0到620。这是我的代码:
for index in range(0, 621):
if((zeroes[index,1] != 0) and (zeroes[index,3] != 0)):
del(zeroes[index,])
我一直遇到关键错误。 KeyError:(0,1)
我的教练建议我更改范围以进行测试,以查看数据框中是否有不良行。是的我检查了数据框的尾部,然后将范围更改为(616,621)。然后我得到了关键错误:(616,1)。
有人知道我的代码出了什么问题或为什么我遇到了关键错误吗?
此代码还会产生(0,1)的键错误:
index = 0
while (index < 621):
if((zeroes[index,1] != 0) and (zeroes[index,3] != 0)):
del(zeroes[index,])
index = index + 1
答案 0 :(得分:1)
在此不要使用手动的for
循环。您发生错误的原因可能是df.__getitem__((x, y))
(实际上是df[x, y]
所称的df = df[df.iloc[:, [1, 3]].eq(0).any(1)]
没有意义)。
相反,请使用向量化操作和布尔索引。例如,要删除第1列或第3列不等于0的行:
#if (__x86_64__ || __ppc64__)
inline bool WideCAS(fat_pointer_rec<T> &old_value,
fat_pointer_rec<T> &new_value, std::memory_order morder) {
bool ret;
__asm__ __volatile__(
"lock cmpxchg16b %1;\n"
"sete %0;\n"
:"=m"(ret),"+m" (*(volatile fat_pointer_rec<T> *) (&fat_p))
:"a" (old_value.ptr), "d" (old_value.tag), "b" (new_value.ptr), "c" (new_value.tag));
std::atomic_thread_fence(morder);
return ret;
}
#else
inline bool WideCAS(fat_pointer_rec<T> &old_value,
fat_pointer_rec<T> &new_value, std::memory_order morder) {
errexit("WCAS not supported with -m32.");
}
#endif