1

我有一个items_sold_summer带有 ids 的数据框,我想添加一个item_category_id来自另一个数据框的列items。所以我尝试了:

items_sold_summer = pd.merge(items_sold_summer, items, on="item_id", how="left")

但它返回:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-21-bccff91befa5> in <module>()
      1 transactions_summer_2014 = transactions.loc[transactions.month_year.isin(['06.2014','07.2014','08.2014'])]
      2 items_sold_summer = transactions_summer_2014["item_price"] * transactions_summer_2014["item_cnt_day"]
----> 3 items_sold_summer = pd.merge(items_sold_summer, items, on="item_id", how="left")
      4 items_sold_summer = pd.merge(items_sold_summer, item_categories, on="item_category_name", how="left")
      5 items_sold_summer

/opt/conda/lib/python3.6/site-packages/pandas/core/reshape/merge.py in merge(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator)
     51                          right_on=right_on, left_index=left_index,
     52                          right_index=right_index, sort=sort, suffixes=suffixes,
---> 53                          copy=copy, indicator=indicator)
     54     return op.get_result()
     55 

/opt/conda/lib/python3.6/site-packages/pandas/core/reshape/merge.py in __init__(self, left, right, how, on, left_on, right_on, axis, left_index, right_index, sort, suffixes, copy, indicator)
    529             raise ValueError(
    530                 'can not merge DataFrame with instance of '
--> 531                 'type {0}'.format(type(left)))
    532         if not isinstance(right, DataFrame):
    533             raise ValueError(

ValueError: can not merge DataFrame with instance of type <class 'pandas.core.series.Series'>

数据

>>>items_sold_summer.head()
1705909    399.00
1705910    149.00
1705911    246.32
1705912    399.00
1705913    399.00

>>>items.head()
                                           item_name  item_id  \
0          ! ВО ВЛАСТИ НАВАЖДЕНИЯ (ПЛАСТ.)         D        0   
1  !ABBYY FineReader 12 Professional Edition Full...        1   
2      ***В ЛУЧАХ СЛАВЫ   (UNV)                    D        2   
3    ***ГОЛУБАЯ ВОЛНА  (Univ)                      D        3   
4        ***КОРОБКА (СТЕКЛО)                       D        4   

   item_category_id  
0                40  
1                76  
2                40  
3                40  
4                40  

我希望有这样的事情:

>>>items_sold_summer.head()
item_id    sum_sold    item_category_id  
1705909    399.00      12
1705910    149.00      23
1705911    246.32      ...
1705912    399.00
1705913    399.00
4

1 回答 1

0

这行代码就是问题所在:

items_sold_summer = transactions_summer_2014["item_price"] * transactions_summer_2014["item_cnt_day"]

我认为您的意思是创建一个如下列:

items_sold_summer['col'] = transactions_summer_2014["item_price"] * transactions_summer_2014["item_cnt_day"]

相反,您创建了一个series. 由于您正在合并 aseries和一个数据框,因此会导致错误。如果您仔细阅读,错误消息ValueError: can not merge DataFrame with instance of type <class 'pandas.core.series.Series'>实际上就是我刚才所说的。

于 2020-10-09T10:16:45.457 回答