如果列中列表中的项是字典键,则替换为值,如果不在字典中,则替换为d

2024-09-27 00:16:38 发布

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

如果pandas列包含列表,则可以使用字典来转换所有值

df['listColumn'] = df['listColumn'].apply(lambda x: [columnDictionary[i] for i in x])

但是,在有些情况下,列表中并非所有的项都是字典的键。在这种情况下,您如何将这些项目替换为零。你知道吗

例如

columnDictionary = {a:1, b:2, d:7, f:8 }

具体行/列:[a、b、c、d、e]

转换后的特定行/列:[1、2、7]


Tags: 项目lambdainpandasdf列表for字典
3条回答

使用简单条件检查列表值是否在目标dict keys list中:

In [47]: df = pd.DataFrame({'listColumn': ['a', 123, list('abcde')]})                                           

In [48]: repl_dict = {'a':1, 'b':2, 'd':7, 'f':8 }                                                              

In [49]: df['listColumn'].apply(lambda x: [repl_dict[v] for v in x if v in repl_dict] if isinstance(x, list) else x)                                                                                                   
Out[49]: 
0            a
1          123
2    [1, 2, 7]
Name: listColumn, dtype: object

在lamdba函数中使用“if else”:

方法1:在列上应用lambda,在下面仅在一列上应用lambda(轴=0)

# apply lambda on 1 column (axis = 0) 
d = {'col1':[ 'a', 'b', 'c', 'd', 'e']}
df = pd.DataFrame(data=d)

columnDictionary ={'a':1, 'b':2, 'd':7, 'f':8 } 

df['col1'] = df['col1'].apply(lambda x: [columnDictionary[x] if x in columnDictionary else ''])
df

方法2:对行(轴=1)应用lambda,逐行(我认为比较慢)

d = {'col1':[ 'a', 'b', 'c', 'd', 'e']}
df = pd.DataFrame(data=d)

columnDictionary ={'a':1, 'b':2, 'd':7, 'f':8 } 

df['listColumn'] = df.apply(lambda x: [columnDictionary[i] if i in columnDictionary else '' for i in x],axis=1)
df

结果:

    col1    listColumn
0   a   [1]
1   b   [2]
2   c   []
3   d   [7]
4   e   []

有一个内置函数来检查某个东西是否是list,它叫做isinstance(mydata,list)它将分别返回True或False。你知道吗

相关问题 更多 >

    热门问题