【问题标题】:Merging dataframes in pandas - Keep getting key error?合并熊猫中的数据框 - 不断收到关键错误?
【发布时间】:2023-03-25 20:03:01
【问题描述】:

我正在尝试合并两个数据帧 testr 和 testc,但我一直在“通道 ID”上收到一个关键错误,并且不确定问题出在哪里。数据框是否必须具有相同的大小或具有相同的数据类型才能使 pd.merge 工作?这是我在每个数据帧上与 .info() 合并的代码:

def matchID_RC(rev,cost):
    rc = pd.merge(rev, cost, on='Channel ID', how = 'outer')
    return rc

testr.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 169 entries, 0 to 168
Data columns (total 7 columns):
Channel ID         169 non-null int64
Channel Name       169 non-null object
Impressions        169 non-null object
Fill Rate          169 non-null object
Gross Rev          169 non-null object
Impression Fees    169 non-null object
Exchange Fees      169 non-null object
dtypes: int64(1), object(6)
memory usage: 10.6+ KB

testc.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 63 entries, 0 to 62
Data columns (total 3 columns):
Channel ID    62 non-null object
Campaign      63 non-null object
Ad Spend      63 non-null float64
dtypes: float64(1), object(2)
memory usage: 2.0+ KB

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    它们必须是相同的数据类型。毕竟不能比较字符串和整数是否相同。

    【讨论】:

      【解决方案2】:

      似乎'Channel ID' 确实存在于两个数据帧中,但是,其中一个定义为object,另一个定义为int

      这可以用convert_objects修复:

      def matchID_RC(rev,cost,col='Channel ID'):
          rev[col]=rev[col].convert_objects(convert_numeric=True)
          cost[col]=cost[col].convert_objects(convert_numeric=True)
          rc = pd.merge(rev, cost, on=col, how = 'outer')
          return rc
      

      【讨论】:

        【解决方案3】:

        您应该将“on”更改为“left_on”和“right_on”以获得更好的解析,如 Pandas 官方文档中所述:

        要加入的列或索引级别名称。这些必须在两者中找到 数据帧。如果 on 是 None 并且没有合并索引,那么这个 默认为两个 DataFrame 中列的交集。

        【讨论】:

          猜你喜欢
          • 2021-09-02
          • 2018-07-13
          • 2015-05-28
          • 2023-02-02
          • 1970-01-01
          • 1970-01-01
          • 2013-09-26
          • 1970-01-01
          • 2014-07-02
          相关资源
          最近更新 更多