Pandas中左连接后id列自动舍入问题求助
解决DataFrame左连接后id列自动舍入的问题
问题原因
左连接后id列出现舍入,大概率是以下两种情况:
- id列被存储为浮点数类型:浮点数无法精确表示大整数,导致显示时精度丢失;若读取数据时id列存在空值,pandas会自动将整数列转为float类型。
- pandas显示设置限制:默认对大整数或浮点数采用科学计数法/截断显示,看起来像是舍入。
解决方案
1. 强制id列为整数类型(优先推荐)
先确认id列的数据类型,再转换为整数(支持空值的话用Int64类型):
import pandas as pd # 查看数据类型 print(df1.dtypes) # 转换为可空整数类型(兼容空值) df1['id'] = df1['id'].astype('Int64') # 若确认无空值,直接转普通整数 df1['id'] = df1['id'].astype(int)
读取数据时直接指定类型,从源头避免问题:
df1 = pd.read_csv('your_file.csv', dtype={'id': 'Int64', 'ticket_id': int}) df2 = pd.read_csv('another_file.csv', dtype={'ticket_id': int})
2. 调整pandas显示设置
如果数据类型正确只是显示问题,修改显示规则避免自动舍入:
# 禁止浮点数科学计数法,显示为整数格式 pd.set_option('display.float_format', '{:.0f}'.format) # 或者更灵活的设置,仅处理整数类浮点数 pd.set_option('display.float_format', lambda x: f'{x:.0f}' if x.is_integer() else x)
3. 确保关联键类型一致后再连接
连接前保证两个DataFrame的ticket_id类型一致,避免连接过程中触发类型转换:
# 统一关联键类型 df2['ticket_id'] = df2['ticket_id'].astype(df1['ticket_id'].dtype) # 执行左连接 merged_df = df1.merge(df2, on='ticket_id', how='left')
内容的提问来源于stack exchange,提问作者Keerti Baskar
相关产品推荐
相关产品推荐

