You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaex合并列生成新列时整数转浮点数函数失效问题排查

解决方案

问题分析

  • Vaex采用惰性计算机制,直接对列执行astype('float')后不会立即生效,后续的astype('string')仍会基于原列类型处理
  • 单纯转换浮点数再转字符串,无法保证固定输出.00000的格式,需要显式指定格式化规则

修正后的函数

import vaex
import pandas as pd  
import numpy as np

def new_column_by_column_merging(df, columns=None):
    if columns is None:
        columns = df.get_column_names()
    if isinstance(columns, str):
        df['merged_column_key'] = df[columns].astype('string')
        return df

    # 初始化空字符串列
    df['merged_column_key'] = ''
    for col in columns:
        # 判断列是否为数值类型(整数/浮点数)
        if df[col].dtype.kind in ['i', 'f']:
            # 格式化数值为保留5位小数的字符串,自动补全.00000
            formatted_col = df[col].astype('float64').str.format('{:.5f}')
        else:
            # 非数值列直接转字符串
            formatted_col = df[col].astype('string')
        # 拼接时避免开头出现多余下划线
        df['merged_column_key'] = df['merged_column_key'] + ('_' if df['merged_column_key'] != '' else '') + formatted_col
    return df

# 测试代码
pandas_df = pd.DataFrame({'Name': ['Tom', 'Joseph', 'Krish', 'John'], 
                          'Last Name': ['Johnson', 'Cameron', 'Biden', 'Washington'], 
                          'Age': [20, 21, 19, 18], 
                          'Weight': [60.0, 61.0, 62.0, 63.0]})  
print('pandas_df is')
print(pandas_df)  

df = vaex.from_pandas(df=pandas_df, copy_index=False)

df_fixed = new_column_by_column_merging(df, ['Name', 'Age', 'Weight'])

print('修正后的合并结果:')
print(df_fixed[['Name', 'Age', 'Weight', 'merged_column_key']])

关键改进点

  • 不修改原数据列:仅在拼接时临时格式化数值,避免破坏原始数据集
  • 强制统一格式:用str.format('{:.5f}')确保所有数值(无论整数/浮点数)都输出为带5位小数的字符串
  • 优化拼接逻辑:避免合并列开头出现多余的下划线
  • 适配Vaex惰性计算:所有操作基于Vaex表达式系统执行,确保计算生效

测试结果

输出的merged_column_key格式统一,例如:

  • Tom_20.00000_60.00000
  • Joseph_21.00000_61.00000

这样无论两个数据集的同列类型是整数还是浮点数,合并后的连接键格式完全一致,解决了跨数据集连接时的类型不匹配问题。

内容的提问来源于stack exchange,提问作者Henry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:15:18