【问题标题】:Dictionary mapping return Nan字典映射返回楠
【发布时间】:2020-08-05 18:12:02
【问题描述】:

我有两个数据集,我想从表 A 的两列创建一个字典,然后在表 B 中创建一个新列,其执行类似于 excel vloopup

表 A

Date       Wk of Year   ...Other columns
2020-1-1       1
2020-1-2       1
2020-1-10      2
2020-1-11      2

表 B

Shop   Date        Sales   ...Other columns
A      2020-1-1    100
B      2020-1-1    100
C      2020-1-1    100
A      2020-1-10   100

Expected Result
Shop   Date        Sales   Wk of Year
A      2020-1-1    100         1
B      2020-1-1    100         1
C      2020-1-1    100         1
A      2020-1-10   100         2

我从表 A 创建字典的代码

name = pd.to_datetime(Table A['date'])
wk =   Table A['Wk of Year']
dict= dict(zip(name,wk))

Table B['wk'] = pd.to_datetime(Table B ['Date'].map(dict)

实际结果:

Shop   Date        Sales   Wk of Year
A      2020-1-1    100         NaT
B      2020-1-1    100         NaT
C      2020-1-1    100         Nat
A      2020-1-10   100         Nat

【问题讨论】:

  • 首先,不要在dict= dict(zip(name,wk)) 中使用dict 作为名称,因为您正在践踏内置名称。其次,您不能只在整数列上调用pd.to_datetime;这就是您收到NaT 的原因。你为什么要使用pd.to_datetime
  • 您能否修改您的示例,使其成为有效代码?很多语法是不正确的,我可以保证pd.to_datetime 不会返回NaT,而是会抛出错误,除非你指定errors='coerce',我没有看到。当示例不起作用时,很难提供解决方案。

标签: python python-3.x pandas sklearn-pandas


【解决方案1】:

尝试使用 pandas 的 merge 函数并传递 on 参数 - 它是关于您要加入数据集的内容的列。

Table_merged = pd.merge(Table_B, Table_A['Date', 'Wk_of_Year'], on='Date')

它将创建一个您期望的数据集:

         Date  Sales Shop  Wk_of_Year
0  2020-01-01    100    A           1
1  2020-01-01    100    B           1
2  2020-01-01    100    C           1
3  2020-01-10    100    D           2

但是如果你仍然想使用你的策略 - 使用 pandas insert 函数:

date_wk_dct = {key: value for key, value in Table_A[['Date', 'Wk_of_Year']].get_values()}
Table_B.insert(3, "Wk_of_Year", [date_wk_dct[v] for v in iter(Table_B['Date'].get_values())], True)

这将在您现有的 Table_B 数据集中插入新列,结果将相同:

         Date  Sales Shop  Wk_of_Year
0  2020-01-01    100    A           1
1  2020-01-01    100    B           1
2  2020-01-01    100    C           1
3  2020-01-10    100    D           2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2010-11-27
    • 1970-01-01
    • 2015-10-17
    • 2021-02-17
    • 2011-08-25
    • 2020-03-15
    相关资源
    最近更新 更多