Python 若列中列表中的项是字典键,则替换为值,若不在字典中,则删除
如果列包含列表,则可以使用字典使用Python 若列中列表中的项是字典键,则替换为值,若不在字典中,则删除,python,pandas,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]有一个内置函数来检查某个内容是否为列表,
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]有一个内置函数来检查某个内容是否为列表,它称为isinstance(mydata,list)它将分别返回True或False。有一个内置函数来检查某个内容是否为列表,它称为isinstance(mydata,list)whitch将分别返回True或False。在lamdba函数中使用“if-else”: 方法1:在列上应用lambda,下面仅在一列上应用lambda(轴=0) 方法2:在行(轴=1)上应用lambda,逐行(我认为速度较慢) 结果:
col1 listColumn
0 a [1]
1 b [2]
2 c []
3 d [7]
4 e []
在lamdba函数中使用“if else”:
方法1:在列上应用lambda,下面仅在一列上应用lambda(轴=0)
方法2:在行(轴=1)上应用lambda,逐行(我认为速度较慢)
结果:
col1 listColumn
0 a [1]
1 b [2]
2 c []
3 d [7]
4 e []
使用简单条件检查列表值是否在目标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
使用简单条件检查列表值是否在目标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
虽然这更容易阅读,但不知何故,这会耗尽我系统中的所有ram,并需要一段时间才能完成操作,而另一种解决方案需要几秒钟的时间ram@SantoshGupta7,我编辑了我的答案,并添加了另一个将Lambda应用于列而不是行的方法。我想会更快。我会检查性能,如果发现其他问题,会通知您。虽然这更容易阅读,但不知何故,这会占用我系统中的所有ram,并需要一段时间才能完成操作,而另一种解决方案需要几秒钟的时间ram@SantoshGupta7,我编辑了我的答案并添加了另一个方法,该方法将Lambda应用于列而不是行。我想会更快。我会检查性能,如果发现其他问题,会告诉你。我把答案换成了这个。另一个更容易阅读,但我注意到它需要很长时间才能运行,并且会消耗掉我所有的内存,而你的答案需要几秒钟才能运行,并且不会消耗掉内存。知道为什么吗?我把答案换成了这个。另一个更容易阅读,但我注意到它需要很长时间才能运行,并且会消耗掉我所有的内存,而你的答案需要几秒钟才能运行,并且不会消耗掉内存。知道为什么吗?