【发布时间】:2017-09-04 19:11:25
【问题描述】:
请记住,我来自 R 背景(也是新手)。
我正在尝试根据一些定义的规则创建一个 UDF 以在 Python 中格式化 data.frame df。第一部分删除 data.frame 的前 4 行,第二部分添加我想要的列名。我的函数如下所示:
def dfFormatF(x):
#Remove 4 first lines
x = x.iloc[4:]
#Assign column headers
x.columns = ['Name1', 'Name2', 'Name3']
dfFormatF(df)
当我这样运行它时,它不起作用(既不删除第一行也不重命名)。当我删除x=x.iloc[4:] 时,第二部分x.columns = ['Name1', 'Name2', 'Name3'] 工作正常并且列名被重命名。此外,如果我在函数之外运行删除,例如:
def dfFormatF(x):
#Assign column headers
x.columns = ['Name1', 'Name2', 'Name3']
df=df.iloc[4:]
dfFormatF(df)
在调用我的函数之前,我得到了完整的预期结果(首先删除第一行,然后是所需的列命名)。
关于为什么它不能作为函数的一部分工作,但它在函数之外起作用的任何想法?
非常感谢任何帮助。
提前致谢。
【问题讨论】:
-
您不会
return函数中的 DF 并将其分配给某些东西。更改应用于函数范围,然后被丢弃。在您的第一个函数中将return x放在x.columns下并执行df = dfFormatF(df)以调用该函数并将结果分配给df -
x = x.iloc[4:]不应该改变df吗?另外,这个x.columns = ['Name1', 'Name2', 'Name3']也不应该得到处理吗?为什么返回但不是第一部分?我也试过用return x结束我的函数,但这也没有用。 -
已发布,您正在编辑,所以没有看到您的新笔记。你的建议奏效了:)我不得不说
df = dfFormatF(df),一切都很好。非常感谢您的帮助-如果您将其作为答案发布,我可以关闭它。 -
感谢您的接受。请也查看我的编辑,这很重要。
-
我明白了——我不知道这一点。感谢您非常详尽的解释!
标签: python user-defined-functions