python - 将锯齿状数组转换为 Pandas 数据框
问题描述
我正在尝试获得一个看起来像这样的锯齿状 2D 列表
l = [
[(1, 0.8656769), (2, 0.08902887), (5, 0.040293545)],
[(1, 0.5918752), (2, 0.04440181), (4, 0.05204634), (5, 0.3066661)],
[(1, 0.26327166), (2, 0.26078925), (4, 0.24160784), (5, 0.22958432)],
[(2, 0.92498404), (5, 0.065140516)],
[(1, 0.9882947)],
[(0, 0.23412614), (1, 0.031903207), (2, 0.03044448), (3, 0.6480669), (4, 0.053342175)],
[(0, 0.056099385), (3, 0.9084766), (5, 0.031809118)],
[(2, 0.39833495), (4, 0.52058107), (5, 0.077259734)],
[(0, 0.46812743), (1, 0.10643007), (3, 0.15962379), (4, 0.017917762), (5, 0.24552101)],
[(0, 0.2556301), (1, 0.7391994)]
]
成为如下所示的数据框:
在l
中,每一行可能包含也可能不包含所有列。每个元组的结构如下(column_label, cell_value)
。如果该行缺少一列,则其值应在数据框中设置为 0。
我试过了
topics_df = pd.DataFrame(l).fillna(0)
但这会导致数据框如下所示:
解决方案
让我们尝试格式化列表以 dict 哪个熊猫数据框可以识别
df = pd.DataFrame(dict(enumerate(list(map(dict,l))))).T.sort_index(axis=1).fillna(0)
Out[17]:
0 1 2 3 4 5
0 0.000000 0.865677 0.089029 0.000000 0.000000 0.040294
1 0.000000 0.591875 0.044402 0.000000 0.052046 0.306666
2 0.000000 0.263272 0.260789 0.000000 0.241608 0.229584
3 0.000000 0.000000 0.924984 0.000000 0.000000 0.065141
4 0.000000 0.988295 0.000000 0.000000 0.000000 0.000000
5 0.234126 0.031903 0.030444 0.648067 0.053342 0.000000
6 0.056099 0.000000 0.000000 0.908477 0.000000 0.031809
7 0.000000 0.000000 0.398335 0.000000 0.520581 0.077260
8 0.468127 0.106430 0.000000 0.159624 0.017918 0.245521
9 0.255630 0.739199 0.000000 0.000000 0.000000 0.000000
推荐阅读
- bash - 如何查看 bash 令牌?
- reactjs - react-transition-group/react-router 在路由更改时跳转到窗口顶部
- excel - 如何使用索引、匹配和大提取excel中的前五个值
- javascript - 将 forEach() 方法更改为 For 循环以与 IntersectionObserver 一起使用 - Javascript
- heroku - heroku-app 部署后未运行
- c# - 时间:2019-01-10 标签:c#changeget implementation get
() 要得到() - python - 数据清洗:处理来自用户输入的大量不同格式
- java - spring boot项目中如何配置RestClientProxyFactoryBean
- python - 如何在运行时访问 pytest 测试运行的整体测试结果?
- java - Kotlin:修饰符“覆盖”不适用于“初始化程序”