我有两个dataframe,我正在将float值转换为字符串作为vlookup过程的一部分。下面是我的两个dataframe表布局:
DF:
| 项目编号|项目描述|项目分类|物料分类说明|
| --------------|--------------|--------------|--------------|
| ABC123|钻石|零零零一|宝石|
| ABC456|蓝宝石|零零零一|宝石|
| DEF000|硅|小零零零二|矿物|
DF2:
| 项目分类|物料分类说明|
| --------------|--------------|
| 零零零一|宝石|
| 小零零零二|矿物|
我能够通过执行以下操作正确地格式化Item Class值(值以float形式导入,并有一些NaN):
df['Item Class']=df['Item Class'].fillna(value=0,inplace=False)
df['Item Class']=df['Item Class'].astype(int,copy=True,errors='raise')
df['Item Class']=df['Item Class'].astype(str,copy=True,errors='raise')
df['Item Class']=df['Item Class'].apply('{:0>4}'.format)
df2['Item Class']=df2['Item Class'].fillna(value=0,inplace=False)
df2['Item Class']=df2['Item Class'].astype(int,copy=True,errors='raise')
df2['Item Class']=df2['Item Class'].astype(str,copy=True,errors='raise')
df2['Item Class']=df2['Item Class'].apply('{:0>4}'.format)
我试着创建一个函数来压缩这个:
def float_to_str(df_column):
df_column=df_column.fillna(value=0,inplace=False)
df_column=df_column.astype(int,copy=True,errors='raise')
df_column=df_column.astype(str,copy=True,errors='raise')
df_column=df_column.apply('{:0>4}'.format)
但是当我用
float_to_str(df['Item Class'])
或
float_to_str(df2['Item Class'])
而不是格式化项目类值,值没有被转换,我要么得到错误消息ValueError: You are trying to merge on float64 and object columns. If you wish to proceed you should use pd.concat
,要么df 2值被保留为float
,这表明在这两种情况下函数都没有正确调用。
2条答案
按热度按时间wooyq4lh1#
我认为你需要这样做,因为你正在创建一个新的系列,而不是改变现有的系列:
whitzsjs2#
问题是df_column=...赋值不会传播回DataFrame
作为一个函数来实现这一点的方法是:
并测试:
给出:
| #|项目编号|项目描述|项目分类|物料分类说明|
| --------------|--------------|--------------|--------------|--------------|
| 0|ABC123|钻石|1.0分|宝石|
| 1|ABC456|蓝宝石|1.0分|宝石|
| 二|DEF000|硅|2.0版|矿物|
| 三|HAL987|翡翠|NaN|矿物|
我添加了Nan行只是为了确保.然后这会生成下面的结果: