I have a dictionary:

matches = {282: 285,
 266: 277,
 276: 293,
 263: 264,
 286: 280,
 356: 1371,
 373: 262,
 314: 327,
 294: 290,
 285: 282,
 277: 266,
 293: 276,
 264: 263,
 280: 286,
 1371: 356,
 262: 373,
 327: 314,
 290: 294}

还有一个df,就像这样:

    team_id 
0   327 
1   293 
2   373 
3   282 
4   314 
5   263 
6   280
7   354 
8   264 
9   294 
10  1371    
11  262 
12  266 
13  356 
14  290 
15  285 
16  286 
17  275 
18  277 
19  276 

现在,我试图创建一个"敌手id"列,从dict映射,如下所示:

df['adversary_id'] = df['team_id'].map(matches)

但是这个新的列敌手_id被转换为type float,两行以NaN结尾:

为什么,如果所有数据都是int类型?

我该怎么解决这个问题?

推荐答案

这是因为np.在数据帧中看到的nan或nan(它们不完全相同)值是float类型.遗憾的是,只要代码中有NaN值,就无法避免这一限制.

请阅读Pandas 文档here中的更多内容.

因为NaN是一个浮点数,所以一列整数(甚至缺少一个值)被转换为浮点数据类型(有关更多信息,请参阅对整数NA的支持).pandas提供了一个可为空的整数数组,可以通过显式请求数据类型来使用该数组:

建议的解决方案是强制type人:

df['team_id'] = pd.Series(df['team_id'],dtype=pd.Int64Dtype())

返回:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 1 columns):
 #   Column   Non-Null Count  Dtype
---  ------   --------------  -----
 0   Example  4 non-null      Int64
dtypes: Int64(1)
memory usage: 173.0 bytes

Python相关问答推荐

判断两极中N(N 2)列水平是否相等

如何在Pygame中绘制右对齐的文本?

具有多个组的条形图的不同y标度

如果我已经使用了time,如何要求Python在12秒后执行另一个操作.sleep

当值是一个integer时,在Python中使用JMESPath来验证字典中的值(例如:1)

不允许AMBIMA API请求方法

用gekko解决的ADE方程系统突然不再工作,错误消息异常:@错误:模型文件未找到.& &

如何处理嵌套的SON?

如何在Deliveryter笔记本中从同步上下文正确地安排和等待Delivercio代码中的结果?

根据另一列中的nan重置值后重新加权Pandas列

Django mysql图标不适用于小 case

在Python Attrs包中,如何在field_Transformer函数中添加字段?

使用groupby Pandas的一些操作

Odoo 16使用NTFS使字段只读

多处理队列在与Forking http.server一起使用时随机跳过项目

joblib:无法从父目录的另一个子文件夹加载转储模型

将pandas导出到CSV数据,但在此之前,将日期按最小到最大排序

Pandas Data Wrangling/Dataframe Assignment

* 动态地 * 修饰Python中的递归函数

在Python中使用yaml渲染(多行字符串)