【发布时间】:2020-03-21 22:14:35
【问题描述】:
我认为我对字符串替换的理解缺少一些东西。提前感谢您的帮助。
我有一个类似于下面的数据框:
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')
虽然这会更改空字符串,但它似乎也在更改我想要保留的值。例如,当期望的输出保持为 85494.0 时,combine_test 索引 550 也会发生变化。
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
【问题讨论】:
-
如果存在两个值会怎样?这意味着两列都没有
np.nan。 -
那个实例没有出现在我的数据中。生成的数据框是来自多个 csv 文件的合并数据框,两列从未同时使用
-
您可能想查看其他答案。此外,如果您希望将来自不同数据帧的多个列合并在一起,您可能需要考虑使用combine(假设您使用了
pd.read_csv) -
我只是在检查您和 David 的解决方案,非常感谢更高的效率和简单的替代方案。我很感激这些信息让我改进——谢谢大家