如何在函数中将pandas数据框切片为参数?

佛朗哥·索莱萨(Franco Solleza)

我要做的是将切片熊猫数据框的规则放在函数中。

例如:

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()可以工作,但这告诉我DataFrames没有.loc [...]属性。例如:

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

返回值:

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

我在这里想念什么吗?任何想法或选择将不胜感激!

8one6

在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]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章