我可以写一个函数来合并列到一个新的列,但在将列改为字符串进行合并之前,无法将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)
1条答案
按热度按时间rbl8hiat1#
看起来vaex表达式系统并不总是能很好地处理try / except检查。所以你需要小心处理dtype。处理这个问题的一种方法是:
基本上我修改了try/except语句来显式地检查字符串(因为它们不能被转换成浮点数)。如果需要的话,你可能需要扩展这个检查来检查其他的东西,比如日期时间等等。希望这能有所帮助