python - 如何将 pandas 数据帧切片作为函数中的参数?

标签 python pandas getattr

我想要做的是将切片 pandas 数据框的规则放入函数中。

例如:

row1 = {'a':5,'b':6,'c':7,'d':'A'}
row2 = {'a':8,'b':9,'c':10,'d':'B'}
row3 = {'a':11,'b':12,'c':13,'d':'C'}
df = pd.DataFrame([row1,row2,row3])

我以这种方式对数据框进行切片:

print df.loc[df['a']==5]
print df.loc[df['b']==12]
print df.loc[(df['b']==12) | df['d'].isin(['A','C']),'d']

出于我的目的,我需要将同一个数据帧作为函数的一部分以不同的方式切片。例如:

def slicing(locationargument):
    df.loc(locationargument)
    do some stuff..
    return something

或者,我期待 getattr() 工作,但这告诉我 DataFrame 没有 .loc[...] 属性。例如:

getattr(df,"loc[df['a']==5]")

返回:

AttributeError: 'DataFrame' object has no attribute 'loc[df['a']==5]'

我是不是漏掉了什么?任何想法或替代方案将不胜感激!

最佳答案

在 Pandas 中,我认为将 .loc 视为 DataFrame 上的函数(或方法)不太正确。例如,语法 df.loc(...) 是不正确的。相反,您需要编写 df.loc[...](方括号,而不是圆括号)。

那么简单的怎么样:

def slicing(locationargument):
    df.loc[locationargument]
    do some stuff..
    return something

但是接下来的问题是“locationargument 应该是什么类型的对象?如果它是一个长度等于数据框中行数的可迭代对象,那么一切就绪。另一种选择可能是把它变成一个字符串然后写:

def slicing(locationargumentstring):
    df.loc[eval(locationargumentstring)]
    do some stuff..
    return something

如果您选择 getattr 路线,请记住该属性不包含参数。所以以下是错误的:

getattr(df, "loc[df['a']==5]")

但以下方法可行:

getattr(df, "loc")[eval("df['a']==5")]

而且,更直接地说,也是如此

getattr(df, "loc")[df['a']==5]

关于python - 如何将 pandas 数据帧切片作为函数中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29185264/

相关文章:

带有字符串的Python多级getattr

python - 在这个 python 代码中产生 "TypeError character mapping must return integer..."是什么?

python - 如何将 matplotlib 补丁定位在轴范围之外(以便它可以位于标题、图例或图形的任何位置旁边)

python - scikit 如何学习逻辑回归以进行分类或回归

pandas - 如何将多级数据帧加入单级数据帧中的值

python - 使用 getattr() 而不返回,出现以下错误 : getattr(): attribute name must be string

python - __getattr__ 和 __getattribute__ 用于动态生成的类的类/静态属性

python - 类实例作为静态属性

python - Pandas groupby 聚合传递组名进行聚合

python - 条件选择是否保留 Pandas DataFrame 中的顺序?