python pandas 连接 'apply' 返回值时出现奇怪错误

1 投票
1 回答
560 浏览
提问于 2025-04-17 22:39

我遇到了一个奇怪的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

撰写回答