我有一个奇怪的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,而是打印它,则根本没有错误。
我觉得这很奇怪。
任何人都可以提供帮助吗?
谢谢!
答案 0 :(得分:1)
你要做的事情基本上就是加入。您希望将表格与员工的姓名和姓氏一起加入其余的详细信息。如果我是你,我会怎么做 将整个HR数据库加载到数据框中,并将其与new_employees数据框连接。
示例(hr data dataframe,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