Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pandas中将函数应用于loc调用会导致底层数据帧发生更改吗?_Python_Pandas_Jupyter Notebook - Fatal编程技术网

Python 在pandas中将函数应用于loc调用会导致底层数据帧发生更改吗?

Python 在pandas中将函数应用于loc调用会导致底层数据帧发生更改吗?,python,pandas,jupyter-notebook,Python,Pandas,Jupyter Notebook,我正在使用。应用于熊猫。我将一个名为clean_alts(x)(见下文)的函数应用于一个名为“alts”的数据帧系列,其中包含字符串列表(可选的单词形式)或0值列表(int),其中没有可选的列表形式。目标是遍历单词列表(它们存在的地方),对于每个字符串,在第一个“|”处拆分,然后取前面的内容 当我运行df.loc[:,'alts'].apply(lambda x:clean_alts(x)来测试该函数时,该函数会成功地执行此操作 但是,如果我随后运行df['alts'],我会看到底层数据帧序列也

我正在使用。应用于熊猫。我将一个名为
clean_alts(x)
(见下文)的函数应用于一个名为“alts”的数据帧系列,其中包含字符串列表(可选的单词形式)或0值列表(int),其中没有可选的列表形式。目标是遍历单词列表(它们存在的地方),对于每个字符串,在第一个“|”处拆分,然后取前面的内容

当我运行
df.loc[:,'alts'].apply(lambda x:clean_alts(x)
来测试该函数时,该函数会成功地执行此操作

但是,如果我随后运行
df['alts']
,我会看到底层数据帧序列也发生了更改,并且有相同的更改。我的理解是,在不赋值的情况下使用apply永远不会更改底层数据帧

我担心这种行为,我不想在不理解为什么对df临时副本的操作会影响基础df的情况下继续前进

使用.map时会发生同样的情况,如果使用df[df[…]而不是使用loc进行过滤,也会发生同样的情况

我尝试将一个简单的lambda x:str(x)映射到列,但这并不影响底层的数据帧

那么,这是否与我设计函数的方式有关

这是我正在应用的函数

def clean_alts(x):
    if type(x)==list:
        for i in range(len(x)):
            if '|' in x[i]:
                x[i] = x[i].split('|')[0]
    return x
测试函数(更改基础df的代码):


感谢juanpa.arrivillaga的澄清,我怀疑函数中的赋值可能是罪魁祸首,但想确认该行为是预期的

下面是一个简单版本的函数,它是成功的,并且不影响基础df:

df.loc[:,'alts'].apply(lambda x: clean_alts(x))
def clean_alts(x):
    if type(x)==list:
        return [i.split('|')[0] for i in x]
    else:
        return x
您需要为请求调试帮助的问题提供一个解决方案。在任何情况下,“我的理解是,在没有赋值的情况下使用apply都不应该改变底层数据帧。”好吧,但是您的函数会修改序列中的
列表
对象:
x[i]=x[i]。拆分(“|”)[0]
。当然,这些变化会反映在该系列中,因为它仍然保存着与以前相同的对象,并且您已经使用
对它们进行了变异。应用
(通常不是一个好方法)