Python 2.7 python/API中的if…elif语句
我正在编写一个脚本,对人们的名字进行排序。我使用csv模块进行了这项工作,但由于这将与一个更大的熊猫项目相关联,我想我会转换它 我需要将单个名称字段拆分为第一个、中间个和最后一个字段。原始字段首先具有第一个名称。理查德·韦恩·范·戴克 我把名字分开了,但想让“Van Dyke”成为我的姓 以下是我的csv模块代码:Python 2.7 python/API中的if…elif语句,python-2.7,if-statement,pandas,split,Python 2.7,If Statement,Pandas,Split,我正在编写一个脚本,对人们的名字进行排序。我使用csv模块进行了这项工作,但由于这将与一个更大的熊猫项目相关联,我想我会转换它 我需要将单个名称字段拆分为第一个、中间个和最后一个字段。原始字段首先具有第一个名称。理查德·韦恩·范·戴克 我把名字分开了,但想让“Van Dyke”成为我的姓 以下是我的csv模块代码: with open('inputfil.csv') as inf: docs = csv.reader(inf) next(ccaddocs, None) f
with open('inputfil.csv') as inf:
docs = csv.reader(inf)
next(ccaddocs, None)
for i in docs:
#print i
fullname = i[1]#it's the second column in the input file
namelist =fullname.split(' ')
firstname = namelist[0]
middlename = namelist[1]
if len(namelist) == 2:
lastname = namelist[1]
middlename = ''
elif len(namelist) == 3:
lastname = namelist[2]
elif len(namelist) == 4:
lastname = namelist[2] + " " + namelist[3] #gets Van Dyke in lastname
print "First: " + firstname + " middle: " + middlename + " last: " + lastname
以下是我正在努力解决的基于pandas的代码:
df = pd.DataFrame({'Name':['Richard Wayne Van Dyke','Gary Del Barco','Dave Allen Smith']})
df = df.fillna('')
df =df.astype(unicode)
splits = df['Name'].str.split(' ', expand=True)
df['firstName'] = splits[0]
if splits[2].notnull and splits[3].isnull:#this works for Bret Allen Cardwell
df['lastName'] = splits[2]
df['middleName'] = splits[1]
print "Case 1: First: " + df['firstName'] + " middle: " +df['middleName'] + " last: " + df['lastName']
elif splits[2].all() == 'Del':#trying to get last name of "Del Barco"
print 'del'
df['middleName'] = ''
df['lastName'] = splits[2] + " " + splits[3]
print "Case 2: First: " + df['firstName'] + " middle: " +df['middleName'] + " last: " + df['lastName']
elif splits[3].notnull: #trying to get last name of "Van Dyke"
df['middleName'] = splits[1]
df['lastName'] = splits[2] + " " + splits[3]
print "Case 3: First: " + df['firstName'] + " middle: " +df['middleName'] + " last: " + df['lastName']
我缺少一些基本的东西 谢谢你的回复。我明白你的逻辑,但当我打印“lastnames”时,我得到:>>>01 2 3 2 Dave Allen Smith无>>>我不确定这里发生了什么。我希望看到一份姓氏列表。当我将lastnames更改为
splits[2]+splits[3]
时,我得到:>>>0 VanDyke 1 NaN 2 NaN数据类型:对象>>>您是否尝试过打印拆分以查看实际存在的内容?是:0 Richard 1 Gary 2 Dave姓名:0,数据类型:对象0 Wayne 1 Del 2 Allen姓名:1,数据类型:对象0 Van 1 Barco 2 Smith姓名:2,数据类型:对象0 Dyke 1 None 2 None姓名:3,数据类型:objectI尚未找到熊猫,但已修改了我的csv代码,该代码将在将数据传递给熊猫之前完成工作。我没有像上面的csv代码那样使用csv.reader
,而是将其更改为csv.DictReader
。通过将数据传递到字典,可以很容易地使用Name字段的键值对来获得csv代码。
if len(name) >= 3: # (assume that user only has one middle name)
firstname = splits[0]
middlename = splits[1]
lastnames = splits[2:] ( catch all last names into a list )