创建新的 pandas 列时,如果键不在字典中的其他条件中,则插入 NaN



我想使用列表推导式使用字典中的值填充 pandas 数据框中设定长度的列。

字典将与数据框现有列中的几乎所有唯一值对应的键映射到某些值。至关重要的是,并非所有唯一值都包含在字典中。在这些情况下,我想放置熊猫原生空值 NaN。这样,我的新列表可以与数据框中的列具有相同的长度。

我尝试在列表理解中使用 if-else 结构,如下所示:

df['col_B'] = [d[key] for key in df['col_A'].values if key in d else NaN]

我希望为字典中没有键值对的行获得一个完全填充的 NaN 列。但是我收到以下错误:

SyntaxError: invalid syntax

我知道错误在于语句的 else 部分,但我不知道如何指定该部分,以便它为缺少的键值对插入 NaN。

下面是重现错误的玩具示例:

# Import pandas library 
import pandas as pd
# create a dictionary
d = {1:'a',2:'b', 3:'c'}  
# create a list
data = [2,1,3,1,4,2,2,1,4,3]
# Create a data drame with list as only column
df = pd.DataFrame(data, columns = ['number']) 
# add new column by populating list with matching dictionary values
df['letter'] = [d[key] for key in df['number'] if key in d else NaN]

你只需要map在这里

df['letter']=df.number.map(d)
df
number letter
0       2      b
1       1      a
2       3      c
3       1      a
4       4    NaN
5       2      b
6       2      b
7       1      a
8       4    NaN
9       3      c

相关内容

  • 没有找到相关文章