Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 3.x 替换DataFrame列值-列行数据存储为列表_Python 3.x_Dataframe_Lambda - Fatal编程技术网

Python 3.x 替换DataFrame列值-列行数据存储为列表

Python 3.x 替换DataFrame列值-列行数据存储为列表,python-3.x,dataframe,lambda,Python 3.x,Dataframe,Lambda,我非常感谢您为解决这个难题所做的贡献, 我在快照中有以下结构的此数据框,我正在尝试用此列表(myList)中的值替换嗜好列中的值,这些值当前不存在于嗜好列的每一行中 这就是我尝试过的,我似乎离正确的解决方案还很远 df.apply(lambda x:df['Hobbies'],(for i in myList: if i not in x : x.append(i))) 感谢您的输入。-p>将单个数据帧列的单个值替换为新值: df['column name']=df['column name

我非常感谢您为解决这个难题所做的贡献, 我在快照中有以下结构的此数据框,我正在尝试用此列表(myList)中的值替换嗜好列中的值,这些值当前不存在于嗜好列的每一行中

这就是我尝试过的,我似乎离正确的解决方案还很远

df.apply(lambda x:df['Hobbies'],(for i in myList: if i not in x : x.append(i)))

感谢您的输入。

-p>将单个数据帧列的单个值替换为新值:

df['column name']=df['column name'].替换(['old value'],'new value')
-用单个DataFrame列的新值替换多个值:

df['column name']=df['column name']。替换(['1st old value','2nd old value',…],'new value'))
-用单个数据帧列的多个新值替换多个值:

df['column name']=df['column name']。替换(['1st old value','2nd old value',…],['1st new value','2nd new value',…]))

-用整个数据帧的新值替换单个值:

df=df.replace(['old value'],'new value')

问题在于lambda函数的语法

正确的代码是:

import pandas as pd

df = pd.DataFrame({"name":["coe","wood","silla"],
                    "color":["yellow","green","white"],
                    "hobbies":[["swimming","reading"],
                                ["dancing","reading"],
                                ["driving","reading"]
                                ]})

a=["dancing","climbing","singing"]

df["hobbies"]=df["hobbies"].apply(lambda x: x + [i for i in a if i not in x])
在这种情况下,您应该只将函数应用于一列,因此可以将当前列替换为新列


希望它能起作用

您的贡献非常有用,上述案例的另一个场景是,如果行中有空列表,我想用整个列表a=[“跳舞”、“攀爬”、“唱歌”]a=[“跳舞”、“攀爬”、“唱歌”]替换这一行,那么lambda的方法会更好。这是一种方法,我正在尝试df[“嗜好”]=df[“嗜好”]。如果单元格中有一个空列表,则应用(lambda x:[a代表x中的I,如果I不是其他x]),我之前发送的代码应该仍然有效,因为空列表中不会有任何项目
[“跳舞”、“攀爬”、“唱歌”]
,因此单元格将充满完整的列表。另一方面,如果单元格中的对象是非类型对象,即
None
,则必须对我发送的原始行进行一些修改:
df[“嗜好”]=df[“嗜好”]。应用(lambda x:x+[i代表a中的i,如果i不在x中]如果x不是其他a)
。如果这是你的意思,请告诉我。感谢Matias的贡献,真的非常有帮助:)
import pandas as pd

df = pd.DataFrame({"name":["coe","wood","silla"],
                    "color":["yellow","green","white"],
                    "hobbies":[["swimming","reading"],
                                ["dancing","reading"],
                                ["driving","reading"]
                                ]})

a=["dancing","climbing","singing"]

df["hobbies"]=df["hobbies"].apply(lambda x: x + [i for i in a if i not in x])