【发布时间】:2020-01-01 17:27:36
【问题描述】:
我需要在 pandas 中使用 vlookup 功能。
DataFrame 2:(FEED_NAME 没有重复的行)
+-----------+--------------------+---------------------+
| FEED_NAME | Name | Source |
+-----------+--------------------+---------------------+
| DMSN | DMSN_YYYYMMDD.txt | Main hub |
| PCSUS | PCSUS_YYYYMMDD.txt | Basement |
| DAMJ | DAMJ_YYYYMMDD.txt | Effiel Tower router |
+-----------+--------------------+---------------------+
DataFrame 1:
+-------------+
| SYSTEM_NAME |
+-------------+
| DMSN |
| PCSUS |
| DAMJ |
| : |
| : |
+-------------+
DataFrame 1 包含更多的行数。它实际上是更大表中的一列。我需要将 df1 与 df2 合并以使其看起来像:
+-------------+--------------------+---------------------+
| SYSTEM_NAME | Name | Source |
+-------------+--------------------+---------------------+
| DMSN | DMSN_YYYYMMDD.txt | Main Hub |
| PCSUS | PCSUS_YYYYMMDD.txt | Basement |
| DAMJ | DAMJ_YYYYMMDD.txt | Eiffel Tower router |
| : | | |
| : | | |
+-------------+--------------------+---------------------+
在 excel 中,我会执行 VLOOKUP(,,1,TRUE),然后在所有单元格中复制相同的内容。
我尝试了各种合并和加入的组合,但我不断收到KeyError:'SYSTEM_NAME'
代码:
_df1 = df1[["SYSTEM_NAME"]]
_df2 = df2[['FEED_NAME','Name','Source']]
_df2.rename(columns = {'FEED_NAME':"SYSTEM_NAME"})
_df3 = pd.merge(_df1,_df2,how='left',on='SYSTEM_NAME')
_df3.head()
【问题讨论】:
-
使用
_df1.reset_index和_df2.reset_index重置数据帧上的索引应该可以工作 -
您能否执行 print(_df2.info()) 以确保在应用
rename后正确重命名该列,因为 Pandas 文档指出不包含在 dict / Series 中的标签将保留为是。否则,请使用:_df2.rename(columns = {'FEED_NAME':"SYSTEM_NAME"}, errors="raise")