python - 数据框索引操作无法按预期工作
问题描述
我当前的代码
M = pd.DataFrame(index=range(10), columns=range(6))
for i in M.index:
M.loc[i,0:2] = 1550
for i in M.index:
M.loc[i,3:6] = 300
#########################################################################
FOa = 0.00123
i = 0
j = 1
while i < 10:
while j < 3:
M.iloc[i,j] = (1+2*FOa)*M.iloc[i+1,j] - FOa*(M.iloc[i+1,j-1] + M.iloc[i+1,j+1])
j = j +1
i = i + 1
输出结果如下
0 1 2 3 4 5
0 1550 1550 1551.55 300 300 300
1 1550 1550 1550 300 300 300
2 1550 1550 1550 300 300 300
3 1550 1550 1550 300 300 300
4 1550 1550 1550 300 300 300
5 1550 1550 1550 300 300 300
6 1550 1550 1550 300 300 300
7 1550 1550 1550 300 300 300
8 1550 1550 1550 300 300 300
9 1550 1550 1550 300 300 300
我的问题是为什么只有第 2 列的第一行被修改而不是全部被修改?
解决方案
因为值 toj
仅在两个循环之外分配,因此在内部循环的第一次迭代之后j
是 3 并且它不会进入后续行的循环。
问题可以这样解决:
while i < 10:
j = 1
while j < 3:
M.iloc[i,j] = (1+2*FOa)*M.iloc[i+1,j] - FOa*(M.iloc[i+1,j-1] + M.iloc[i+1,j+1])
j = j +1
i = i + 1
但是由于您引用了下面的行,M.iloc[i+i,j]
您可能希望迭代直到最后一行,并指定循环后最后一行的值。
推荐阅读
- html - 如何使 react-monaco-edtor 响应?
- javascript - sidebar.getElementsByClassName 不是函数
- coq - 搜索 Coq 库
- html - 如何更改html数据列表的颜色
- javascript - 从反应 POST 请求收到的打开 URL
- javascript - 方法类方法和原型有什么区别?
- python - python time.time() 和 time.perf_counter() 在 window、ubuntu 和基于 web 的解释器中是不同的结果。它来自病毒吗?
- c++ - 如果我的代码出错了,有人可以看看吗?
- flutter - 当前 Flutter SDK 版本为 0.0.0-未知
- python - 即使存在 PyInit_ 条目,Python 也无法加载 C++ 库