我有一个csv
文件,其中包含MLA
格式的作者列表。
df = pd.read_csv('file.csv')
如果我检查我的列名:
df['name']
'van der Hilst, Rob, Chen, Min, Huang, Hui, Niu, Fenglin, Yao, Huajian'
'Malanotte-Rizzoli, Paola, Eltahir, Elfatih, Wei, Jun, Xue, Pengfei'
'Bowring, Samuel, Hoke, Gregory, Schmitz, Mark'
我想提取Firstname+Familyname
并为其分配唯一ID。例如,我想要Rob van der Hilst = 0
,Min Chen = 1
等等。
答案 0 :(得分:2)
如果我理解你的问题是正确的,那么你可以利用python字符串sclicing和其他花哨的语言功能
这是代码和解释:
加载名称
names = 'van der Hilst, Rob, Chen, Min, Huang, Hui, Niu, Fenglin, Yao, Huajian' + \
'Malanotte-Rizzoli, Paola, Eltahir, Elfatih, Wei, Jun, Xue, Pengfei' + \
'Bowring, Samuel, Hoke, Gregory, Schmitz, Mark'
在逗号上分隔名称,后跟空格:
names = names.split(', ')
使用python切片提取名字和姓氏,名称如下: [' van der Hilst',' Rob',' Chen'' Min',' Huang' ...]
切片采用标量[start:stop:steps]的形式,因此我们从第一个名字和第一个名字开始,并采取大小为2的步骤来获取所有其他姓氏或名字,如果&#39 ;停止'是空的,这意味着继续直到结束'
last_names = names[::2]
first_names = names[1::2]
最后我们使用字典完整性将名称映射到id,为此我们使用:
zip函数将姓氏和姓氏粘在一起
用于分配数字的枚举函数
'%s%s'合并名字和姓氏
names = {'%s %s' % (fn, ln) : _id for _id, (fn, ln) in enumerate(zip(first_names, last_names))}
最终代码是:
names = 'van der Hilst, Rob, Chen, Min, Huang, Hui, Niu, Fenglin, Yao, Huajian' + \
'Malanotte-Rizzoli, Paola, Eltahir, Elfatih, Wei, Jun, Xue, Pengfei' + \
'Bowring, Samuel, Hoke, Gregory, Schmitz, Mark'
names = names.split(', ')
last_names = names[::2]
first_names = names[1::2]
names = {'%s %s' % (fn, ln) : _id for _id, (fn, ln) in enumerate(zip(first_names, last_names))}