关于python vaex在将int更改为float时将列合并为新列

ogsagwnx  于 2022-10-30  发布在  Python
关注(0)|答案(1)|浏览(162)

我可以写一个函数来合并列到一个新的列,但在将列改为字符串进行合并之前,无法将int列改为float列。
我希望在新的合并列中,那些整数会有待定的“.00000”。
最后,我尝试将合并列作为键,用于连接多个键/列上的两个vaex。因为似乎vaex只需要一个列/键来连接两个vaex,所以我需要将合并列作为键。
将int更改为float是在一个vaex中的列是int而另一个vaex中的列是float的情况下。
代码如下。
函数new_column_by_column_merging正在运行,但函数new_column_by_column_merging2未运行。正在考虑是否有任何方法可以使其运行。

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 type(columns) is str:
        df['merged_column_key'] = df[columns]
        return df

    df['merged_column_key'] = np.array(['']*len(df))
    for col in columns:
        df['merged_column_key'] = df['merged_column_key'] + '_' + df[col].astype('string')
    return df

def new_column_by_column_merging2(df, columns=None):
    if columns is None:
        columns = df.get_column_names()
    if type(columns) is str:
        df['merged_column_key'] = df[columns]
        return df

    df['merged_column_key'] = np.array(['']*len(df))
    for col in columns:
        try:
            df[col] = df[col].astype('float')
        except:
            print('fail to convert to float')
        df['merged_column_key'] = df['merged_column_key'] + '_' + df[col].astype('string')
    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)

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

print('new_column_by_column_merging returns')
print(df1)

df2 = new_column_by_column_merging2(df, ['Name', 'Age', 'Weight'])

print('new_column_by_column_merging2 returns')
print(df2)
rbl8hiat

rbl8hiat1#

看起来vaex表达式系统并不总是能很好地处理try / except检查。所以你需要小心处理dtype。处理这个问题的一种方法是:

import vaex

df = vaex.datasets.titanic()  # dataframe for testing

def new_column_by_column_merging2(df, columns=None):
    if columns is None:
        columns = df.get_column_names()
    if type(columns) is str:
        df['merged_column_key'] = df[columns]
        return df

    df['merged_column_key'] = np.array(['']*len(df))
    for col in columns:
        if df[col].is_string():
            pass
        else:
            df[col] = df[col].astype('float')
        df['merged_column_key'] = df['merged_column_key'] + '_' + df[col].astype('string')
    return df

new_column_by_column_merging2(df)   # should work

基本上我修改了try/except语句来显式地检查字符串(因为它们不能被转换成浮点数)。如果需要的话,你可能需要扩展这个检查来检查其他的东西,比如日期时间等等。希望这能有所帮助

相关问题