相关疑难解决方法(0)

Python:熊猫系列 - 为什么要使用loc?

为什么我们将'loc'用于pandas数据帧?似乎以下代码使用或不使用loc编译anr以相同的速度运行

%timeit df_user1 = df.loc[df.user_id=='5561']

100 loops, best of 3: 11.9 ms per loop
Run Code Online (Sandbox Code Playgroud)

要么

%timeit df_user1_noloc = df[df.user_id=='5561']

100 loops, best of 3: 12 ms per loop
Run Code Online (Sandbox Code Playgroud)

那么为什么要使用loc?

编辑:这已被标记为重复的问题.但是,虽然pandas iloc vs ix vs loc解释?确实提到*

你可以只使用数据框的getitem进行列检索 :

*

df['time']    # equivalent to df.loc[:, 'time']
Run Code Online (Sandbox Code Playgroud)

它没有说明为什么我们使用loc,虽然它确实解释了loc的许多功能,但我的具体问题是"为什么不完全省略loc"?我已经接受了以下非常详细的答案.

还有其他帖子的答案(我认为不是答案)在讨论中非常隐藏,任何寻找我正在寻找的人都会发现很难找到信息,而且提供的答案会更好我的问题.

python series loc pandas

47
推荐指数
3
解决办法
2万
查看次数

如何选择数据帧的最后一列

我已经做了一些寻找这个问题的答案,但我能弄清楚的是:

df[df.columns[len(df.columns)-1]]
Run Code Online (Sandbox Code Playgroud)

对我来说,这似乎是unweildy,而不是pythonic(和慢?).

在没有指定列名的情况下,为pandas数据帧中的最后一列选择数据的最简单方法是什么?

python pandas

45
推荐指数
5
解决办法
7万
查看次数

使用loc和使用方括号来过滤Pandas/Python中的列有什么区别?

我注意到在Pandas DataFrame中选择一个列的三种方法:

使用loc选择列的第一种方法:

df_new = df.loc[:, 'col1']
Run Code Online (Sandbox Code Playgroud)

第二种方法 - 看起来更简单,更快捷:

df_new = df['col1']
Run Code Online (Sandbox Code Playgroud)

第三种方法 - 最方便:

df_new = df.col1
Run Code Online (Sandbox Code Playgroud)

这三种方法有区别吗?我不这么认为,在这种情况下我宁愿使用第三种方法.

我很好奇为什么似乎有三种方法可以做同样的事情.

python dataframe pandas

40
推荐指数
2
解决办法
8096
查看次数

索引Pandas数据帧:整数行,命名列

Say df是一个熊猫数据帧.

  • df.loc[] 只接受名字
  • df.iloc[] 只接受整数(实际展示位置)
  • df.ix[] 接受名称和整数:

引用行时,df.ix[row_idx, ]只想获得名称.例如

df = pd.DataFrame({'a' : ['one', 'two', 'three','four', 'five', 'six'],
                   '1' : np.arange(6)})
df = df.ix[2:6]
print(df)

   1      a
2  2  three
3  3   four
4  4   five
5  5    six

df.ix[0, 'a']
Run Code Online (Sandbox Code Playgroud)

抛出错误,它不会返回'两个'.

在引用列时,iloc更喜欢整数,而不是名称.例如

df.ix[2, 1]
Run Code Online (Sandbox Code Playgroud)

返回'三',而不是2.(虽然df.idx[2, '1']确实返回2).

奇怪的是,我想要完全相反的功能.通常我的列名非常有意义,所以在我的代码中我直接引用它们.但是由于大量的观察清理,我的pandas数据框中的行名通常不对应range(len(df)).

我意识到我可以使用:

df.iloc[0].loc['a'] # returns three
Run Code Online (Sandbox Code Playgroud)

但它看起来很难看!有没有人知道更好的方法来做到这一点,所以代码看起来像这样?

df.foo[0, 'a'] # returns three
Run Code Online (Sandbox Code Playgroud)

事实上,是否有可能将自己的新方法添加到pandas.core.frame.DataFrames,所以例如 df.idx(rows, cols)实际上是df.iloc[rows].loc[cols]

python dataframe pandas

36
推荐指数
5
解决办法
3万
查看次数

SettingWithCopyWarning,即使使用loc(?)

SettingWithCopyWarning在我不期望它们的情况下我会遇到错误:

N.In <38>: # Column B does not exist yet
N.In <39>: df['B'] = df['A']/25
N.In <40>: df['B'] = df['A']/50

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/pandas/core/indexing.py:389: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
  self.obj[item] = s
Run Code Online (Sandbox Code Playgroud)

N.In <41>: df.loc[:,'B'] = df['A']/50

/Users/josh/anaconda/envs/py27/lib/python2.7/site-packages/pandas/core/indexing.py:389: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
  self.obj[item] = …
Run Code Online (Sandbox Code Playgroud)

python pandas

11
推荐指数
2
解决办法
5225
查看次数

Pandas:通过行索引和列名称获取单元格值

假设我们有一个 pandas 数据框:

   name  age  sal
0  Alex   20  100
1  Jane   15  200
2  John   25  300
3   Lsd   23  392
4   Mari  21  380
Run Code Online (Sandbox Code Playgroud)

假设现在删除了几行,但我们不知道已删除的索引。例如,我们使用 删除行索引 1 df.drop([1])。现在数据框可以归结为:

  fname  age  sal
0  Alex   20  100
2  John   25  300
3   Lsd   23  392
4   Mari  21  380
Run Code Online (Sandbox Code Playgroud)

我想从行索引 3 和列“年龄”获取值。它应该返回 23。我该怎么做?

df.iloc[3, df.columns.get_loc('age')]不起作用,因为它将返回 21。我猜 iloc 采用连续行索引?

python pandas

11
推荐指数
1
解决办法
5万
查看次数

Python Pandas:“ loc”和“ iloc”代表什么吗?

我一直在使用熊猫有一段时间了,我明白了什么lociloc做。但是直到今天,我都不知道这两件事是否代表某种意义?他们是某种缩写还是缩写?还是只是随机的?

我将其解释iloc为“基于索引的位置”,这很有意义,但loc对我来说有点问题,我将其解释为“位置”,但没有喊出“基于标签的位置”,为什么他们不能称之为“基于标签的位置” lloc

python pandas

9
推荐指数
1
解决办法
816
查看次数

如何通过混合iloc和loc在pandas DataFrame中设置值

假设我想要一个函数来更改DataFrame的给定行号中的命名列的值.
一种选择是找到列的位置并使用iloc,如下所示:

def ChangeValue(df, rowNumber, fieldName, newValue):
    columnNumber = df.columns.get_loc(fieldName)
    df.iloc[rowNumber, columnNumber] = newValue
Run Code Online (Sandbox Code Playgroud)

但是我想知道是否有办法一次性使用iloc和loc的魔法,并跳过手动转换.

有任何想法吗?

python pandas

8
推荐指数
3
解决办法
3602
查看次数

如何在Pandas数据框中按名称选择行列表?

我试图使用列表从Pandas数据帧中提取行,但无法完成.这是一个例子

# df
    alleles  chrom  pos strand  assembly#  center  protLSID  assayLSID  
rs#
TP3      A/C      0    3      +        NaN     NaN       NaN        NaN
TP7      A/T      0    7      +        NaN     NaN       NaN        NaN
TP12     T/A      0   12      +        NaN     NaN       NaN        NaN
TP15     C/A      0   15      +        NaN     NaN       NaN        NaN
TP18     C/T      0   18      +        NaN     NaN       NaN        NaN

test = ['TP3','TP12','TP18']

df.select(test)
Run Code Online (Sandbox Code Playgroud)

这就是我试图用列表中的元素做的事情,我收到了这个错误TypeError: 'Index' object is not callable.我究竟做错了什么?

python select dataframe pandas

8
推荐指数
1
解决办法
1万
查看次数

为什么/熊猫如何将方括号与.loc和.iloc一起使用?

因此,.loc和.iloc不是您的典型函数。他们以某种方式使用[和]包围参数,以便与普通数组索引相当。但是,我从来没有在另一个库中看到过这一点(我可以想到,也许numpy就是我正在空白的东西),而且我不知道它在技术上是如何工作的/是在python代码中定义的。

在这种情况下,方括号只是函数调用的语法糖吗?如果是这样,那么如何使一个任意函数使用方括号而不是括号呢?否则,它们的使用/定义熊猫有何特别之处?

谢谢。

python pandas

7
推荐指数
1
解决办法
1477
查看次数

标签 统计

pandas ×10

python ×10

dataframe ×3

loc ×1

select ×1

series ×1