python - 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
解决方案
你可以这样做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
推荐阅读
- c++ - 是否存在经过认证的(ISO 26262 或类似的)C++ 标准库?
- r - 函数如何读取其包内的静态 csv 文件
- terraform - Terraform 中交互变量的加载顺序
- sql - 如何执行从 Spring JDBC 到 PostgreSQL 的带有多个分号的单个 SQL 查询?
- javascript - Javascript ID 转换为 onchange 变量
- yii2 - 如何获取有关用户在 Yii2 中进入哪个控制器的时间的指标
- android - 如何检查 android 签名 apk 特定案例的崩溃日志
- excel - Excel 宏将列过滤为今天的日期
- r - 在新的 R 传单 2.0 中显示旧标签样式
- serilog - 如何在 Visual Studio 单元测试中将 Serilog 输出写入控制台?