Python 如何在使用自定义函数后存储新的数据帧?

Python 如何在使用自定义函数后存储新的数据帧?,python,pandas,dataframe,user-defined-functions,Python,Pandas,Dataframe,User Defined Functions,我刚刚开始使用用户定义的函数,所以这可能不是一个非常复杂的问题,请原谅 我有一些数据帧,它们都有一个名为“interval\u time”的列(例如),我想将这个列重命名为“Timestamp” 我知道我可以用这个手动操作 df = df.rename(index=str, columns={'interval_time': 'Timestamp'}) 但现在我想定义一个名为rename的函数来为我实现这一点。我已经看到这是可行的 def rename(data): print(dat

我刚刚开始使用用户定义的函数,所以这可能不是一个非常复杂的问题,请原谅

我有一些数据帧,它们都有一个名为“interval\u time”的列(例如),我想将这个列重命名为“Timestamp”

我知道我可以用这个手动操作

df = df.rename(index=str, columns={'interval_time': 'Timestamp'})
但现在我想定义一个名为rename的函数来为我实现这一点。我已经看到这是可行的

def rename(data):
    print(data.rename(index=str, columns={'interval_time': 'Timestamp'}))
但我似乎不知道如何保存重命名的数据帧,我已经尝试过了

def rename(data):
    data = data.rename(index=str, columns={'interval_time': 'Timestamp'})
我使用的数据帧具有以下形式:

df_scada
              interval_time                 A         ...             X                 Y 
0       2010-11-01 00:00:00                0.0        ...                396.36710         381.68860
1       2010-11-01 00:05:00                0.0        ...                392.97974         381.40634
2       2010-11-01 00:10:00                0.0        ...                390.15695         379.99493
3       2010-11-01 00:15:00                0.0        ...                389.02786         379.14810

如果没有inplace=True,函数将创建一个新对象,需要返回:

import pandas as pd

def rename(data):
    return data.rename(index=str, columns={'interval_time': 'Timestamp'})

data = pd.DataFrame([1,2,3,4], columns=['interval_time'])
renamed_data = rename(data)

如果不应创建新的DF,请在函数中设置inplace=True。

调用
重命名
函数后,不需要重新分配数据帧,因为
是一个可变对象,因此它是通过引用传递的。看看这个链接,了解python对象是如何传递的

此外,还应该使用
inplace
属性,这样就不会在函数中创建新对象。重命名函数中的代码将如下所示

def rename(data):
    data.rename(index=str, columns={'interval_time': 'Timestamp'}, inplace=True)

调用
rename(df)
后,数据帧
df
的列将被重命名。

有几点需要注意:

  • 您需要在函数中使用
    return
  • 将此类函数设置为通用函数是一种很好的做法。例如,输入和输出列名可以是设置了默认值的参数
  • Pandas提供便利的方法链接
  • 您不应该将函数命名为与Pandas方法相同的名称。这只会导致混乱
将这些要素放在一起:

def rename_col(data, col_in='interval_time', col_out='Timestamp'):
    return data.rename(index=str, columns={col_in: col_out})

df = df.pipe(rename_col)

这是一个简单的示例,可能不需要用户定义的函数。但是,当您编写更复杂的函数时,上述建议可能会有所帮助。

请告诉我是否需要为MCVE包含任何其他内容。
返回数据如何。
重命名(…)
函数内的
重命名
,然后
df=rename(df)
?很漂亮,谢谢。我同意这很简单,我本可以用另一种更简单的方法来做,我刚刚开始理解如何使用用户定义的函数,所以我认为这是一件很好的事情try@LukaVlaskalic,没问题,我想是的,这就是为什么我想我应该给出一些额外的提示:)我刚刚更新了问题,使问题更加复杂。我已经回滚了。请作为一名教师提问。因为已经有3个答案了,所以不可能每个人都按照新的要求更新自己的答案。因此,如果你真的想改进熊猫,请查看精彩的博客系列。实际上,使用inplace通常是[不鼓励]()。顺便说一句,更好的解决方案是不创建新函数,只使用
data=data.rename(Index=str,columns={'interval\u time':'Timestamp'})
。无论如何,这种方法和您的函数不适用于管道