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

2024-10-01 02:30:28 发布

您现在位置:Python中文网/ 问答频道 /正文

请记住我来自一个R的背景(相当新手以及)。你知道吗

我正在尝试创建一个自定义项来格式化数据框df在Python中,根据一些定义的规则。第一部分删除数据框第二个添加我想要的列名。我的函数如下所示:

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)

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

关于为什么它不作为功能的一部分工作,但它在功能之外工作,有什么想法吗?你知道吗

非常感谢您的帮助。你知道吗

提前谢谢。你知道吗


Tags: columns数据函数功能dfdefcolumn重命名
1条回答
网友
1楼 · 发布于 2024-10-01 02:30:28

这里的问题是,更改只在dfFormatF()的范围内进行。一旦退出该函数,所有更改都将丢失,因为您没有return结果,也没有将结果分配给模块级作用域中的某个对象。值得退一步,从一般意义上理解这一点(这不是具体的事情)。你知道吗

相反,将DF传递给函数,对该DF进行转换,return作为结果,然后将结果赋回传递给函数的名称。你知道吗

注意这对熊猫来说是件大事。我们在这里模拟的是inplace=True功能。您可以对数据帧执行很多操作,如果不使用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()

相关问题 更多 >