提问者:小点点

用分隔符分隔两个熊猫系列创建字典


我有两个列A和B与相应的键和值,如果被':'分割。我正在尝试创建一个词典,以便以后能够添加更多的列,基于关键字在哥伦比亚。

当列表不是熊猫系列的一部分时,下面的代码可以工作,但是当我应用到熊猫系列时,它会抛出TypeError: unasable type:'list'。

ColumnA = 'abc:def:ghi'
ColumnB = '111:222:333'

ColumnA_list = ColumnA.split(':')
ColumnB_list = ColumnB.split(':')

ColumnC = dict(zip(ColumnA_list, ColumnB_list))
print(ColumnC)

但是,以下代码会引发错误:

KEYS = df['ColumnA'].str.split(':')
VALUES = df['ColumnB'].str.split(':')

df['ColumnC'] = dict(zip(KEYS, VALUES))
print(df['ColumnC'])

TypeError: unhashable type: 'list'

我尝试使用其他方法创建字典,但无法克服此错误。我还尝试先将它们转换为元组和集合,但没有成功。这是实现我想从ColumnC得到的东西的最好方法吗。有别的方法吗?


共2个答案

匿名用户

你可以试试:

>>> df
           ColumnA          ColumnB
0      abc:def:ghi      111:222:333
1          jkl:def          444:555
2  abc:stu:vwx:ach  666:777:888:999
>>>
>>> df['ColumnC'] = df.apply(lambda row: dict(zip(row.ColumnA.split(':'), row.ColumnB.split(':'))), axis=1)
>>>
>>> df['ColumnC']
0    {'abc': '111', 'def': '222', 'ghi': '333'}              
1    {'jkl': '444', 'def': '555'}                            
2    {'abc': '666', 'stu': '777', 'vwx': '888', 'ach': '999'}
Name: ColumnC, dtype: object

匿名用户

过程中简化了一点,如下所示:

代码:

import pandas as pd
import numpy as np

ColumnA = 'abc:def:ghi'
ColumnB = '111:222:333'
ColumnC = dict(zip(ColumnA.split(':'), ColumnB.split(':')))
print(ColumnA, ColumnB, ColumnC)

df = pd.DataFrame()
df['ColumnA'] = ColumnA.split(':')
df['ColumnB'] = ColumnB.split(':')
df['ColumnC'] = ColumnC.items()
print(df)

输出:

abc:def:ghi 111:222:333 {'abc': '111', 'def': '222', 'ghi': '333'}
  ColumnA ColumnB     ColumnC
0     abc     111  (abc, 111)
1     def     222  (def, 222)
2     ghi     333  (ghi, 333)