【问题标题】:vlookup on text field using pandas使用 pandas 对文本字段进行 vlookup
【发布时间】: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")

标签: python pandas join merge


【解决方案1】:

您错过了 _df2.rename(columns = {'FEED_NAME':"SYSTEM_NAME"}) 行中的 inplace=True 参数,因此 _df2 列名称没有更改。试试这个:

_df1 = df1[["SYSTEM_NAME"]]
_df2 = df2[['FEED_NAME','Name','Source']]
_df2.rename(columns = {'FEED_NAME':"SYSTEM_NAME"}, inplace=True)
_df3 = pd.merge(_df1,_df2,how='left',on='SYSTEM_NAME')
_df3.head()

【讨论】:

    猜你喜欢
    • 2014-10-19
    • 1970-01-01
    • 2021-07-10
    • 2018-03-31
    • 2019-01-14
    • 2017-08-06
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多