我知道访问 Pandas 数据框中的索引/列的常用方法(另请参阅索引 guide ):
-
df.iloc[..., ...]
对于整数位置 -
df.loc[..., ...]
用于基于标签的位置 -
df.ix
(已弃用) -
df['C1']
或df.C1
用于列访问 -
df['mylabel1':'mylabel10']
或df[2:7]
用于行切片访问,但是df['mylabel1']
和df[2]
显然不行
我总是发现最后两个要点令人困惑,因为我们使用相同的符号 df[...]
用于列访问或行访问。
问题:有没有一种方法可以配置 Pandas(或 DataFrame
的子类)来简化一切:
df[...] is in fact an alias for df.loc[...]
<强>?强>
示例:
import numpy as np
import pandas as pd
x = pd.DataFrame(columns=['C1', 'C1', 'C2'])
x.loc['a'] = [np.random.rand(2000, 500), np.random.rand(2000, 500), np.random.rand(2000)]
print(x.loc['a', 'C2'])
x['a', 'C2'] # should give the same thing, so that by default, x[...] is the same as x.loc[...]
最佳答案
Python 中的每个表达式都会有一个对象作为结果,因此您可以为其分配一个名称:
xl=x.loc
xl['a']=… # equivalent to x.loc['a']=…
您无法以这种方式模拟x.loc=…
,因为分配给xl
只会重新绑定(bind)名称;这可能与这里无关,但为了完整性,(稍微)缩短此类内容的唯一方法是编写类似的内容
class Setter:
def __init__(self,x): self.x=x
def __getattr__(self,n):
return lambda(v): setattr(self.x,n,v)
xset=Setter(x).loc
xset(…) # equivalent to x.loc=…
如果您希望有一个名称仍然支持其他访问模式,您可以编写一个包装类:
class DFLoc:
def __init__(self,x): self.x=x
def __getitem__(self,k): return self.x.loc[k]
def __getattr__(self,n): return getattr(self.x,n)
此方法还允许您支持依赖于以下事实的库:x.loc
等构造结果仅与 __setitem__< 使用一次/
之后。 (这通常是此类库中的错误,尽管在某些情况下此类计算属性的值将取决于通过它所做的更改。)
关于python - Pandas 数据框默认使用 .loc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72741696/