如何给DataFrame某列中每个列表的所有元素添加指定数值?
如何给DataFrame某列中每个列表的所有元素添加指定数值?
嗨,我来帮你搞定这个问题~
你之前的写法出错是因为lambda表达式的语法用错啦!你写的lambda row: x+10 for x in row 里,Python会把x+10单独当成lambda的返回值,后面的for x in row直接跑到lambda的作用域外面去了,自然找不到row变量,才会报那个NameError。
其实只要把列表推导式完整地放在lambda的返回位置就可以了,正确的写法应该是这样:
df["foo"] = df["foo"].apply(lambda row: [x + 10 for x in row])
这样每一行的列表都会被逐个遍历,每个元素加上10后生成新列表,完美匹配你的需求~
如果你想把取前4个元素和加10这两个操作合并成一步,也可以直接这么写:
df["foo"] = df["foo"].apply(lambda row: [x + 10 for x in row[:4]])
用你给的例子,原列表[0,1,2,3,4,5,6]就会变成[10,11,12,13],完全符合预期。
另外,也可以用map函数来实现,写法是这样:
df["foo"] = df["foo"].apply(lambda row: list(map(lambda x: x + 10, row)))
不过列表推导式的可读性会更好一些,日常用的话更推荐第一种写法哦。
备注:内容来源于stack exchange,提问作者Coleman YU
相关产品推荐
相关产品推荐

