首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用iloc和列表理解来设置值

用iloc和列表理解来设置值
EN

Stack Overflow用户
提问于 2019-11-23 19:18:10
回答 2查看 992关注 0票数 2

我试图使用列表理解来迭代数据,并使用iloc为位置设置一个新的值。我已经证实它正在正确地迭代。

代码语言:javascript
复制
import pandas as pd
import numpy as np

df = pd.DataFrame([np.arange(10)]*10)

#working
for i in range(10):
    for j in range(10):
        df.iloc[i,j] = 0+i

#not working 
[df.iloc[i,j] = 5 for i in range(10) for j in range(10)]

有人能解释一下为什么上面的话行不通吗?或者是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-23 19:31:59

您在listcomp中做赋值语句df.iloc[i,j] = 5,所以它不起作用。df.iloc[i,j] = 5不返回让listcomp创建列表的任何内容,listcomp不允许语句。您需要在listcomp之外的辅助语句。你的列表可能会改变到这个

代码语言:javascript
复制
df[:] = [[5 for j in range(10)] for i in range(10)]

Out[17]:
   0  1  2  3  4  5  6  7  8  9
0  5  5  5  5  5  5  5  5  5  5
1  5  5  5  5  5  5  5  5  5  5
2  5  5  5  5  5  5  5  5  5  5
3  5  5  5  5  5  5  5  5  5  5
4  5  5  5  5  5  5  5  5  5  5
5  5  5  5  5  5  5  5  5  5  5
6  5  5  5  5  5  5  5  5  5  5
7  5  5  5  5  5  5  5  5  5  5
8  5  5  5  5  5  5  5  5  5  5
9  5  5  5  5  5  5  5  5  5  5

但是,我想这只是一个您用来展示问题的例子,因为有更好的方法来创建这样的dataframe。

票数 0
EN

Stack Overflow用户

发布于 2019-11-23 19:20:38

这是行不通的,因为列表理解需要一个位于其最左边的Python表达式。

代码语言:javascript
复制
[df.iloc[i,j] = 5 for i in range(10) for j in range(10)]
 ^^^^^^^^^^^^^^^^
# This is a statement, not an expression.

这是Python语法的结果,在这里正式指定了:Python3全语法规范

我想你可以重写这个来使用高级索引。为清晰起见,对行和列使用不同的尺寸:

代码语言:javascript
复制
import pandas
import numpy

df = pandas.DataFrame([numpy.arange(4)]*7)

之后,df是:

代码语言:javascript
复制
   0  1  2  3
0  0  1  2  3
1  0  1  2  3
2  0  1  2  3
3  0  1  2  3
4  0  1  2  3
5  0  1  2  3
6  0  1  2  3

您可以使用“想像力索引”来分配,即在列表中提供索引:

代码语言:javascript
复制
df.iloc[[0, 2, 4], [2]] = 100
df.iloc[list(range(6)), list(range(2))] = 125

之后,df是:

代码语言:javascript
复制
     0    1    2  3
0  125  125  100  3
1  125  125    2  3
2  125  125  100  3
3  125  125    2  3
4  125  125  100  3
5  125  125    2  3
6    0    1    2  3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59011286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档