当concat返回'apply'的值时,python pandas奇怪的错误

时间:2014-03-17 12:33:59

标签: python pandas

我有一个奇怪的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 个答案:

答案 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