如果熊猫列包含列表,则可以使用字典使用
转换所有值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]
答案 0 :(得分:2)
只需简单的条件即可检查列表值是否在目标dict键列表中:
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
答案 1 :(得分:1)
有一个内置函数来检查列表中是否有东西,它称为 isinstance(mydata,list)。whinch会分别返回True或False。
答案 2 :(得分:1)
在lamdba函数内部使用“ if else”:
方法1:将lambda应用于列,仅在下面的一列上(axis = 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:将lambda应用于行(轴= 1),逐行(我认为它比较慢)
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 []