我有两个列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得到的东西的最好方法吗。有别的方法吗?
你可以试试:
>>> 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)