python pandas 连接 'apply' 返回值时出现奇怪错误
我遇到了一个奇怪的Python Pandas问题。我有一个叫做new_employees的数据框,里面有7个人的名字和姓氏。我想从一个人力资源数据库中读取每个人的一些详细信息。
def read_a_row(row):
return(pd.read_csv('/HRdatabase/%s/%s/logs/details.csv'%(row['forename'], row['surname']) ));
output = new_employees.apply(read_a_row, axis=1)
但是,当我执行上面的代码时,出现了这个错误:
1798 raise ValueError("Shape of passed values is %s, indices imply %s" % (
1799 tuple(map(int, [tot_items] + list(block_shape))),
-> 1800 tuple(map(int, [len(ax) for ax in axes]))))
1801
1802
ValueError: Shape of passed values is (7,), indices imply (7, 6)
有没有人能告诉我我哪里出错了?如果我不让read_a_row函数返回csv_file,而是直接打印出来,就没有任何错误。
我觉得这真的很奇怪。
有人能帮忙吗?
谢谢!
1 个回答
1
你想做的事情其实就是把两个表格合在一起。你想把员工的名字和姓氏的表格跟他们的其他信息合并。如果我是你,我会把整个HR数据库加载到一个数据框中,然后把它和新的员工数据框合并。
举个例子(HR数据的数据框,hr_df)
name surname haircolor
0 Klark Kent black
1 Lois Lane brown
2 Peter Parker black
3 Poison Ivy red
新的数据框(new_df):
name surname
0 Peter Parker
1 Poison Ivy
现在你有两个选择: 如果这两个数据框的列名是一样的,你可以这样做:
pd.merge(new_df,hr_df,on=["surname","name"])
否则:
pd.merge(new_df,hr_df,left_on=["surname","name"],right_on=["surname","name"]) #change the column names
这样你就能得到你想要的结果:
name surname haircolor
0 Peter Parker black
1 Poison Ivy red