[英]Python - How to convert list back into it's original dataframe after using .apply(pd.eval) function?
我有一个熊猫数据框(在我的代码中定义为“df1”),其中数据是文本,但我希望它们转换为整数/数字。 我有年份(行/左列)和单词描述(列)作为我的数据框索引。 下面的例子
|Alpha |Bravo |Charlie |Delta |
2020 |1.98M | -7.40M |0.00 |29.55K |
2021 |-5.30K | 23.2B |- |35.01K |
我应用下面的代码来清理上面的数据,以确保值可以被识别为整数而不是文本:
repl_dict = {'−':'-', '—':'','[kK]': '*1e3', '[mM]': '*1e6', '[bB]': '*1e9'}
df2 = df1.replace(repl_dict, regex=True).apply(pd.eval)
print(df2)
上面的代码设法将我的值转换为整数,但是 .apply(pd.eval) 函数还通过重新转置来重新格式化我的数据框,使每一行值回到一个列表中,我的年份消失了,列表进入一栏。 输出示例:
|0 |
Alpha |[1980000, -5300] |
Bravo |[-74000000, 23200000000] |
Charlie|[0.00, 0.00] |
Delta |[29550, 35010] |
请有人帮忙,我一直无法找到解决方案来完成这项工作? 如果有另一种方法可以实现以下输出,我不需要使用 .apply(pd.eval) 函数
期望的输出:
|Alpha |Bravo |Charlie |Delta |
2020 |1980000 | -7400000 |0.00 |29550 |
2021 |-5300 | 23200000000 |- |35010 |
提前谢谢了!
也试过:
.apply(pd.eval, axis=0, result_type = 'broadcast')
返回“ValueError:无法广播结果”
您可以使用“正常”评估,而不是“pd.eval”,结合堆栈\/取消堆栈:
df1.stack().replace(repl_dict, regex=True).apply(eval).unstack()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.