字典映射返回Nan

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字典映射返回Nan相关的知识,希望对你有一定的参考价值。

我有两个数据集,我想从表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
答案

试试大熊猫 merge 函数,并将 on arg - 它是你想加入数据集的列。

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 函数,这将在你现有的Table_B数据集中插入新的列,其结果是一样的。

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

以上是关于字典映射返回Nan的主要内容,如果未能解决你的问题,请参考以下文章

Python代码阅读(第26篇):将列表映射成字典

Pandas 映射将所有值返回为 NaN [重复]

如果字典数组由“nan”组成,则不返回任何条目

将数字字符串映射到返回 NaN 的整数

Python snippet(代码片段)

从字典的 defaultdict(list) 中删除 nan 值