如何将 pandas 数据帧切片为函数中的参数?
How do you slice a pandas dataframe as an argument in a function?
我想要做的是将 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]")
Returns:
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]
我想要做的是将 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]")
Returns:
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]