首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫:.loc类索引[.]

熊猫:.loc类索引[.]
EN

Stack Overflow用户
提问于 2017-06-11 23:22:31
回答 2查看 1.2K关注 0票数 1

我想我遗漏了一些非常简单的东西,但我尝试使用类似list的.loc[...]索引来选择数据文件中除最后一行之外的所有行。

设置:

代码语言:javascript
运行
复制
import pandas as pd

df = pd.DataFrame({
        'a':[1,2,3,4,5],
        'b':[6,7,8,9,0]
    })

尝试代码:

代码语言:javascript
运行
复制
df.loc[:-1, 'a'] = df.loc[:-1, 'b']

但是df.loc[:-1, 'a']产生的结果是:Series([], Name: a, dtype: int64),而不是直到最后一行的那个系列。

期望的结果:

代码语言:javascript
运行
复制
   a  b
0  6  6
1  7  7
2  8  8
3  9  9
4  5  0

可以工作,但是有恶意代码:

代码语言:javascript
运行
复制
df.loc[:df.shape[0] - 2, 'a'] = df.loc[:df.shape[0] - 1, 'b']

我的实际代码更复杂,并且依赖于这段代码,所以我不想为了达到预期的结果而彻底重新发明轮子,我想我只是想知道是否有一种简单的方法可以找到类似于本机python的l[:-1]的行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-11 23:39:36

您正在尝试将基于标签的索引与整数索引/切片相结合。您不能为此使用loc,这是基于label-_loc_ation的索引。

熊猫目前提供ix混合标签和基于整数的索引。但这将在未来的版本中被否决。

您可以做的一件事是使用基于整数的索引切片从索引中获取标签。

代码语言:javascript
运行
复制
In [20]: df.loc[df.index[:-1], 'a']
Out[20]:
0    1
1    2
2    3
3    4
Name: a, dtype: int64

所以你的例子是:

代码语言:javascript
运行
复制
In [22]: df.loc[df.index[:-1], 'a'] = df.loc[df.index[:-1], 'b']

In [23]: df
Out[23]:
   a  b
0  6  6
1  7  7
2  8  8
3  9  9
4  5  0

In [24]:
票数 3
EN

Stack Overflow用户

发布于 2017-06-11 23:34:56

使用.iloc对索引切片进行:-1。

代码语言:javascript
运行
复制
df.iloc[:-1,df.columns.get_loc('a')] = df.iloc[:-1,df.columns.get_loc('b')]

否则,.loc将查找':-1‘的标签,不返回任何行,因此返回的是[]系列。通过使用df.columns.get_loc,您将返回标记为'a‘和'b’的行的列索引。

代码语言:javascript
运行
复制
Output:

   a  b
0  6  6
1  7  7
2  8  8
3  9  9
4  5  0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44489629

复制
相关文章

相似问题

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