- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在创建这样的数据框。
np.random.seed(2)
df=pd.DataFrame(np.random.randint(1,6,(6,6)))
out[]
0 1 1 4 3 4 1
1 3 2 4 3 5 5
2 5 4 5 3 4 4
3 3 2 3 5 4 1
4 5 4 2 3 1 5
5 5 3 5 3 2 1
将数据帧拆分为如下所示的 3,3 矩阵,它将具有 16 矩阵。 dfs=[]
for col in range(df.shape[1]-2):
for row in range(df.shape[0]-2):
dfs.append(df.iloc[row:row+3,col:col+3])
让我们打印,
dfs[0]
1 1 4
3 2 4
5 4 5
dfs[1]
3 2 4
5 4 5
3 2 3
.
.
.
dfs[15]
5 4 1
3 1 5
3 2 1
编写一个函数,将位置 [1,0] 和 [1,2] 中每个矩阵的值更改为零,这样我的输出看起来像,
dfs[0]
1 1 4
0 2 0
5 4 5
def process(x):
new=[]
for d in x:
d.iloc[1,0]=0
d.iloc[1,2]=0
new.append(d)
print(d)
return new
dfs=process(dfs.copy())
我的预期输出是
dfs[0]
1 1 4
0 2 0
5 4 5
但是我的函数返回的是,
dfs[0]
1 1 4
0 0 0
0 0 0
dfs[1]
0 0 0
0 0 0
0 0 0
它在所有矩阵中产生更多的零。我不知道为什么它会意外工作或者我的函数 process
做错了什么请帮忙。谢谢。
最佳答案
长话短说,您是 chained indexing 的受害者, 这可以 lead to bad things happening .
当您切片原始 DataFrame
时,您会得到重叠的 View 。
修改一个也会改变其他,因为一个 block 的第二行是另一个 block 的第一行,第一个 block 的第三行是另一个 block 的第一行,依此类推...这就是为什么你仅在“边缘”处看到非零值,因为它们对于单个 block 是唯一的。
您可以像这样复制每个切片:
def process(x):
new = []
for d in x:
d = d.copy() # each one is now a copy
d.iloc[1, 0]=0
d.iloc[1, 2]=0
new.append(d)
return new
最后,请注意 dfs = process(dfs)
实际上没问题;您不需要复制封闭的 list
。
关于python - dataframe iloc 在 pandas 中出乎意料地工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56071241/
一直在断断续续做一个项目,2个月没碰了,今天回来,报错无法运行。 IEnumerable query = mediaTitleCollection.OfType(); 调试器在此行停止并给出标题中描述
我最近读了一篇 article关于生成变更日志,我想将其集成到 package.json 脚本中。 我用正确的项目名称稍微更改了文章中的脚本,并将输出导出到 CHANGELOG.md "script
我添加了这段代码,现在我得到了一个意想不到的标记";"错误。 代码: var i = 0; var tabs = ""; while(i "+ idArray[i] +" &nbs
@echo off for /f "tokens=1,2 delims=," %%x in (my.csv) do ( if %M% LSS %%x set M=%%x ) echo Max X Va
我正在尝试重命名我的 Room 数据库中的列。我傻傻的用了列名index,想改成id,但是这个迁移函数很头疼: static final Migration MIGRATION_2_3 = new M
我不确定这是否是一个错误。代码编译得很好(没有警告),但是当我输入一个方法时,本地值(NSMutableString)会在调试器中显示以下内容: __NSAutoreleaseFreedObject(
这个问题在这里已经有了答案: Synchronous/Asynchronous behaviour of python Pipes (1 个回答) 关闭4个月前。 我正在做一个从 udp 套接字接收样
我是一名优秀的程序员,十分优秀!