繁体   English   中英

"Python - 使用 .apply(pd.eval) 函数后如何将列表转换回原始数据框?"

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM