我有熊猫date_df['col_name']
列,看起来像:
[[1, 7]]
[[1, 7]]
[[1, 11], [13, 13]]
[[1, 11], [14, 14], [16, 18]]
[[1, 7]]
[[1, 8], [15, 16]]
[[1, 11]]
[[1, 8], [15, 16]]
其中每个元素都是字典键。我需要用dict的值替换列表中列表中的每个元素:
date_dict =
{0: Timestamp('2017-01-01 00:00:00', freq='MS'),
1: Timestamp('2017-02-01 00:00:00', freq='MS'),
2: Timestamp('2017-03-01 00:00:00', freq='MS'),
3: Timestamp('2017-04-01 00:00:00', freq='MS'),
4: Timestamp('2017-05-01 00:00:00', freq='MS'),
5: Timestamp('2017-06-01 00:00:00', freq='MS'),
...
34: Timestamp('2019-11-01 00:00:00', freq='MS'),
35: Timestamp('2019-12-01 00:00:00', freq='MS')}
我试过了:
for list_ in date_df['col_name']:
for idx, item in enumerate(list_):
if item in date_dict:
list_[idx] = date_dict[item]
但是这个解决方案返回 TypeError: unhashable type: 'list'
有什么方法可以用dict值替换列表值?
您需要通过内部列表进行循环的另一个嵌套列表理解:
date_df['col_name'] = date_df['col_name'].apply(lambda x: [[d[z] for z in y] for y in x])
date_df['col_name'] = [[[d[z] for z in y] for y in x] for x in date_df['col_name']]
或可能使用的.get
功能,如果不匹配,则可以指定默认值:
#some default value
m = pd.Timestamp('2000-01-01 00:00:00', freq='MS')
date_df['col_name']=date_df['col_name'].apply(lambda x: [[d.get(z, m) for z in y] for y in x])
date_df['col_name'] = [[[d.get(z, m) for z in y] for y in x] for x in date_df['col_name']]
样品:
print (date_df)
col_name
0 [[1,2]]
1 [[100,3]]
d = {0: pd.Timestamp('2017-01-01 00:00:00', freq='MS'),
1: pd.Timestamp('2017-02-01 00:00:00', freq='MS'),
2: pd.Timestamp('2017-03-01 00:00:00', freq='MS'),
3: pd.Timestamp('2017-04-01 00:00:00', freq='MS')}
m = pd.Timestamp('2000-01-01 00:00:00', freq='MS')
date_df['col_name']=date_df['col_name'].apply(lambda x: [[d.get(z,m) for z in y] for y in x])
print (date_df)
col_name
0 [[2017-02-01 00:00:00, 2017-03-01 00:00:00]]
1 [[2000-01-01 00:00:00, 2017-04-01 00:00:00]]
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras