我有一个名字-姓氏组合的列表,例如:
['henry-dupuis', 'arthur-keynes', ...]
我希望能够将字符串分成两部分并创建一个数据框:
df =
fullname firstname lastname
henry-dupuis henry dupuis
arthur-keynes arthur keynes
...
我该怎么做?
答案 0 :(得分:0)
names = ['henry-dupuis', 'arthur-keynes'...]
splitted_names = [[elem] + elem.split('-')[:2] for elem in names]
df = pd.DataFrame(splitted_names, columns=["full-name", "fist-name", "last-name"])
答案 1 :(得分:0)
代码:
df = pd.DataFrame(names, columns=['FullName'])
df['FirstName'] = df['FullName'].apply(lambda x: x.split('-')[0])
df['LastName'] = df['FullName'].apply(lambda x: x.split('-')[1])
结果:
FullName FirstName LastName
0 henry-dupuis henry dupuis
1 arthur-keynes arthur keynes
答案 2 :(得分:0)
如果全名列表中您使用'-'作为分隔符。
然后您可以 首先在其上运行一个循环,然后拆分循环的元素并从中创建一个数据框。
for element in fullnames:
splitNames = element.split('-')
firstName.append(splitNames[0])
lastName.append(splitNames[1])
pd.DataFrame(firstName, columns=['firstName'])
pd.DataFrame(lastName, columns=['lastName'])
这还将为给定的firstName和lastName创建一个熊猫数据框。
答案 3 :(得分:0)
您应该使用str
的{{1}}功能,这些功能是矢量化的:
pandas
这可以确保名称(仅在第一个import pandas as pd
df = pd.DataFrame(["henry-dupuis", "arthur-keynes", "james-arthur-conway"], columns=["fullname"])
df[["firstname", "lastname"]] = df.fullname.str.split("-", 1).apply(pd.Series)
print(df)
# fullname firstname lastname
# 0 henry-dupuis henry dupuis
# 1 arthur-keynes arthur keynes
# 2 james-arthur-conway james arthur-conway
处分开),以防名称中有更多名称。这可能是错误的,但至少可以正常工作。任何代码都无法在任何地方正确地获得此信息。有人叫James-Arthur Conway,有人叫James Arthur-Conway。您应该阅读falsehoods programmers believe about names。
无论如何,如果您的数据确实符合给定的要求,则此代码将比Python中执行的任何循环都有效,并且速度更快。