Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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 如何替换串联列表中的元素_Python_Pandas - Fatal编程技术网

Python 如何替换串联列表中的元素

Python 如何替换串联列表中的元素,python,pandas,Python,Pandas,我有一个如下所示的数据帧 df1 col1 0 10 1 [5, 8, 11] 2 15 3 12 4 13 5 33 6 [12, 19] 生成此df1的代码: df1 = pd.DataFrame({"col1":[10,[5,8,11],15,12,13,33,[12,19]]}) df2 col1 col2 0 12 1 1 10 2

我有一个如下所示的数据帧

df1

         col1
0          10
1  [5, 8, 11]
2          15
3          12
4          13
5          33
6    [12, 19]
生成此df1的代码:

df1 = pd.DataFrame({"col1":[10,[5,8,11],15,12,13,33,[12,19]]})
df2

   col1  col2
0    12     1
1    10     2
2     5     3
3    11    10
4     7     5
5    13     4
6     8     7
生成此df2的代码:

df2 = pd.DataFrame({"col1":[12,10,5,11,7,13,8],"col2":[1,2,3,10,5,4,7]})
我想用
df2
值替换
df1
中的元素

如果序列值包含非列表元素, 我可以用
map

df1['res'] = df1['col1'].map(df2.set_index('col1')["col2"].to_dict())
但是现在这个系列包含列表和标量的混合。 如何有效地替换列表中的元素和串联的标量值

预期产出

         col1     res
0          10        2
1  [5, 8, 11] [3,7,10]
2          15       15
3          12        1
4          13        4
5          33       33

您的系列属于数据类型
object
,因为它包含
int
list
对象。这对熊猫来说效率低下,意味着矢量化解决方案将不可能实现

您可以创建映射字典并使用
pd.Series.apply
。要解释
列表
对象,可以捕获
类型错误
。列表会遇到此特定错误,因为它们不可散列,因此不能用作字典键

d = df2.set_index('col1')['col2'].to_dict()

def mapvals(x):
    try:
        return d.get(x, x)
    except TypeError:
        return [d.get(i, i) for i in x]

df1['res'] = df1['col1'].apply(mapvals)

print(df1)

         col1         res
0          10           2
1  [5, 8, 11]  [3, 7, 10]
2          15          15
3          12           1
4          13           4
5          33          33
6    [12, 19]     [1, 19]

谢谢你的回复。对于这种问题,矢量化解决方案是不可能的。我正在寻找这个问题的矢量化解决方案。因为我的数据集很大,我无法使用apply:(.寻求这方面的矢量化方法problem@MohamedThasinah,根据数据的结构方式,不,这是不可能的。下面的解决方案有帮助吗?如果有,请随时接受或要求澄清。@jpp-I正在等待矢量化解决方案,因为您评论说这是不可能的,我接受答案:)如果你以后发现了,请告诉我。如果你希望考虑一下我的问题,我已经投票赞成你的问题:不幸的是,只要序列是
dtype=object
,矢量化解决方案就不可能实现。如果你想在你的系列中有一个
列表
,情况总是如此。