首页 > 解决方案 > pd.Series 字符串替换意外修改值

问题描述

我认为我对字符串替换的理解缺少一些东西。提前感谢您的帮助。

我有一个类似于下面的数据框:

combine_cols = pd.DataFrame({'totalannualmembers' : [85494.0, np.NaN, np.NaN], 
              'totalannualmembershipssold' : [np.NaN, 90000.0, np.NaN]})

我想将两列合并或组合成一列。为此,我将 NaN 替换为空字符串并将列转换为 str 类型。下面的代码结合了 2 列。

join_cols = ['totalannualmembers', 'totalannualmembershipssold']

#fill NaN with empty string
combine_cols.fillna('', axis = 1, inplace = True)

#convert columns to str type
combine_cols = combine_cols[join_cols].astype(str)

#combine into a single column
combine_cols['combine_test'] = combine_cols['totalannualmembers'].str.cat(combine_cols['totalannualmembershipssold'],sep="")

由于空字符串,当我尝试将combine_cols.combine_test列转换回整数/浮点类型时,出现了我的问题。我尝试用以下内容替换空字符串:

combine_cols.combine_test = combine_cols.combine_test.str.replace('', '9999')

虽然这会改变空字符串,但它似乎也在改变我想要保留的值。例如,combine_test 索引 550 也会在所需输出保持为 85494.0 时发生变化。

combine_cols.iloc[550]
---------------------------------------------------------------------------
totalannualmembers                                            85494.0
totalannualmembershipssold                                           
combine_test                  99998999959999499999999949999.999909999
Name: 550, dtype: object

有没有更好的方法将这两列合并为一列或转换空字符串,以便我可以将列转换回浮点类型进行分析?

combine_cols.combine_test 的期望输出为:

0       85494.0
1       90000.0
2       NaN

标签: pythonpandas

解决方案


你可以这样做fillna

combine_cols['combine_test'] = (combine_cols['totalannualmembers']
                                   .fillna(combine_cols.totalannualmembershipssold)
                               )

输出:

   totalannualmembers  totalannualmembershipssold  combine_test
0             85494.0                         NaN       85494.0
1                 NaN                     90000.0       90000.0
2                 NaN                         NaN           NaN

推荐阅读