首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中,是否可以使用Pandas创建一个函数来获取任意数据帧和任意列作为其输入?

在Python中,是否可以使用Pandas创建一个函数来获取任意数据帧和任意列作为其输入?
EN

Stack Overflow用户
提问于 2017-03-12 13:49:33
回答 2查看 30关注 0票数 2

假设我们有一个这样的数据帧:

代码语言:javascript
复制
 my_df>>  

  column_1   column_2 column_3  column_4
0  0.276162  0.552951  0.866023  0.571535
1  0.112933  0.549487  0.626958  0.988705
2  0.916932  0.561641  0.220696  0.545019

我可以有一个函数,它可以获得任何像这样的数据帧,并将其中的任何一列作为输入吗?

更清楚地说,如果我有一个这样的函数:

代码语言:javascript
复制
def multiply_5(df,column):
    df.column=df.column.apply(lambda x:x*5-3)

如果我以类似的方式使用它,它可以工作吗?

代码语言:javascript
复制
multiply_5(my_df,column_2)

为了实现这一点:

代码语言:javascript
复制
my_df.column_2=my_df.column_2.apply(lambda x:x*5-3)

我知道我写的这种特定的方法不起作用,但是有没有什么简单的方法可以将这个函数用于其他数据帧?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-12 14:06:37

尝试:

代码语言:javascript
复制
def multiply_5(df,column):
    df[column]=df[column].apply(lambda x:x*5-3)
    return df

df = multiply_5(df, "column_2")

print(df)
    column_1    column_2    column_3    column_4
0   0.276162    -4.176225   0.866023    0.571535
1   0.112933    -4.262825   0.626958    0.988705
2   0.916932    -3.958975   0.220696    0.545019

甚至还有一种更奇怪的方式来通过属性来做同样的事情:

代码语言:javascript
复制
def multiply_5(df,column):
    setattr(df,column, getattr(df,column).apply(lambda x:x*5-3))
    return df 
票数 1
EN

Stack Overflow用户

发布于 2017-03-12 16:52:45

实际上,你甚至不需要这样的函数--你可以使用DataFrame.eval()函数:

数据:

代码语言:javascript
复制
In [6]: df
Out[6]:
   column_1  column_2  column_3  column_4
0  0.276162  0.552951  0.866023  0.571535
1  0.112933  0.549487  0.626958  0.988705
2  0.916932  0.561641  0.220696  0.545019

演示:

代码语言:javascript
复制
In [7]: df.eval("column_1 = column_1 * 5", inplace=False)
Out[7]:
   column_1  column_2  column_3  column_4
0  1.380810  0.552951  0.866023  0.571535
1  0.564665  0.549487  0.626958  0.988705
2  4.584660  0.561641  0.220696  0.545019

In [8]: df.eval("new = (column_1 + column_3) ** 2", inplace=False)
Out[8]:
   column_1  column_2  column_3  column_4       new
0  0.276162  0.552951  0.866023  0.571535  1.304587
1  0.112933  0.549487  0.626958  0.988705  0.547439
2  0.916932  0.561641  0.220696  0.545019  1.294197

In [9]: df.eval("new = sqrt(sin(column_2))", inplace=False)
Out[9]:
   column_1  column_2  column_3  column_4       new
0  0.276162  0.552951  0.866023  0.571535  0.724707
1  0.112933  0.549487  0.626958  0.988705  0.722669
2  0.916932  0.561641  0.220696  0.545019  0.729778
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42744241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档