Python键错误:pandas:将行值与缺少某些键的列名/键匹配

2024-10-02 08:26:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下所示的数据帧:

Q5 | Q10 | Q41 | item 
a  | b   | c   |  Q5  
d  | e   | f   |  Q10  
g  | h   | i   |  Q571    
j  | k   | l   |  Q23340  
m  | n   | o   |  Q41  
h  | p   | s   |  Q10  

其中Q5,Q10,Q41,item是数据帧的列名。我想再添加一个列“name”,它将具有列的值,其中列“item”的值与列名匹配。所以我希望它看起来像下面这样:

^{pr2}$

这里的问题是,项目多于列。因此,不是列项中的所有值都作为导致keyError的列存在。我试着做如下:

df['col_exist'] = [(col in df.columns) for col in df.item]
df['name'] = np.where(df['col_exist']==True, df[df.item], np.nan)

我得到的错误是:

KeyError: "['Q571', 'Q23340'] not in index"

我也试过用数据框应用具体如下:

 df['name'] = np.where(df['col_exist']==True, df.apply(lambda x: x[x.item], axis=1), np.nan)

但我得到的错误如下:

KeyError: ('Q571', 'occurred at index 2')

我不知道为什么它试图访问不存在的列,尽管在那里放置了col_exit check。在

有人能帮我解决这个问题吗?在


Tags: 数据nameintruedfnpcolitem
1条回答
网友
1楼 · 发布于 2024-10-02 08:26:51

您可以根据列筛选项目列,然后使用查找,即

df['new'] = df['item'].apply(lambda x : x if x in df.columns else np.nan)

或者

^{pr2}$

输出:

    Q5    Q10    Q41    item  new   name
0  a     b      c         Q5   Q5    a  
1  d     e      f        Q10  Q10    e   
2  g     h      i       Q571  NaN    NaN
3  j     k      l     Q23340  NaN    NaN
4  m     n      o        Q41  Q41    o   
5  h     p      s        Q10  Q10    p   

删除新列df = df.drop('new',1)

要使您的方法有效而不是df[df.item],请使用df['item']

df['name'] = np.where(df['col_exist']==True, df['item'], np.nan)

相关问题 更多 >

    热门问题