gpt4 book ai didi

python - 不删除行作为函数的一部分 - python

转载 作者:太空宇宙 更新时间:2023-11-03 15:52:05 25 4
gpt4 key购买 nike

请记住,我来自 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)

在我调用我的函数之前,我得到了完整的预期结果(首先删除了第一行,然后是所需的列命名)。

关于为什么它不作为函数的一部分工作,但在函数之外工作,有什么想法吗?

非常感谢任何帮助。

提前致谢。

最佳答案

这里的问题是变化只在dfFormatF() 的范围内。一旦退出该函数,所有更改都将丢失,因为您没有返回结果,也没有将结果分配给模块级范围内的某些东西。值得退一步从一般意义上理解这一点(这不是 Pandas 特有的事情)。

相反,将您的 DF 传递给该函数,对该 DF 进行您想要的转换,返回结果,然后将该结果分配回您传递给该函数的名称。

注意 这是 Pandas 中的一件大事。我们在这里模拟的是 inplace=True 功能。您可以对 DataFrames 很多做很多事情,如果您不使用 inplace=True,那么这些更改将会丢失。如果您坚持使用默认的 inplace=False,那么您必须将结果分配回一个变量(使用相同或不同的名称,由您决定)。

import pandas as pd

starting_df = pd.DataFrame(range(10), columns=['test'])

def dfFormatF(x):
#Remove 4 first lines
x = x.iloc[4:]
#Assign column headers
x.columns = ['Name1']
print('Inside the function')
print(x.head())
return x

dfFormatF(starting_df)
print('Outside the function')
print(starting_df) # Note, unchanged

# Take 2
starting_df = dfFormatF(starting_df)
print('Reassigning changes back')
print starting_df.head()

关于python - 不删除行作为函数的一部分 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46042891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com