我有两个数据框,一个包含屏幕名称/显示名称,另一个包含个人,我正在尝试创建第三个数据框,其中包含每一个数据帧在新行中出现的所有数据屏幕名称/显示名称。从功能上讲,这将创建一个可能匹配的名称列表。我目前的代码完美但非常缓慢,看起来像这样:
# Original Social Media Screen Names
# cols = 'userid','screen_name','real_name'
usernames = pd.read_csv('social_media_accounts.csv')
# List Of Individuals To Match To Accounts
# cols = 'first_name','last_name'
individuals = pd.read_csv('individuals_list.csv')
userid, screen_name, real_name, last_name, first_name = [],[],[],[],[]
for index1, row1 in individuals.iterrows():
for index2, row2 in usernames.iterrows():
if (row2['Screen_Name'].lower().find(row1['Last_Name'].lower()) != -1) | (row2['Real_Name'].lower().find(row1['Last_Name'].lower()) != -1):
userid.append(row2['UserID'])
screen_name.append(row2['Screen_Name'])
real_name.append(row2['Real_Name'])
last_name.append(row1['Last_Name'])
first_name.append(row1['First_Name'])
cols = ['UserID', 'Screen_Name', 'Real_Name', 'Last_Name', 'First_Name']
index = range(0, len(userid))
match_list = pd.DataFrame(index=index, columns=cols)
match_list = match_list.fillna('')
match_list['UserID'] = userid
match_list['Screen_Name'] = screen_name
match_list['Real_Name'] = real_name
match_list['Last_Name'] = last_name
match_list['First_Name'] = first_name
因为我需要每列的整行,所以我尝试过的列表理解方法似乎不起作用。
答案 0 :(得分:1)
您想要的是更快地遍历数据框。使用列表解析执行此操作是,从pandas数据帧中获取数据,使用python中的操作处理它,然后将其放回到pandas数据帧中。最快的方法(目前,使用小数据)将使用pandas迭代方法处理它。
您要做的下一件事是使用2个数据帧。大熊猫中有一个名为join
的工具。
result = pd.merge(usernames, individuals, on=['Screen_Name', 'Last_Name'])
合并后,您可以进行过滤。
以下是文档:http://pandas.pydata.org/pandas-docs/stable/merging.html