pandas json_normalize函数的更广泛实现。
flat-table的Python项目详细描述
平面表:字典和列表规范化器
此包是pandasdataframe对象的规范化器,其列中包含dictionary或list对象。这个库将把数据类型在(list,dict)中的所有列展开为单独的行和列。在
PS:展开列表时,flattable将使用dataframe的当前索引作为标识符。输出将具有原始数据帧的索引列。如果你不打算用的话,你可以以后再把它放下。在
安装
要安装,请使用pip。在
pip install flat-table
如何使用
从给定的pandas数据帧中,将使用dataframe的index
来创建单独的列和行。在
importflat_tableflat_table.normalize(df)
这将把字典中的所有键作为列,并将所有列表作为单独的行。在
示例插图
假设您有一个如下形状的数据帧。在
id | user_info | address |
---|---|---|
1001 | { 'first_name': 'john', 'last_name': 'smith', 'phones': {'mobile': '201-..', 'home': '978-..'} } | [{ 'zip': '07014', 'city': 'clifton' }] |
1002 | NaN | [{'zip': '07014', 'address1': '1 Journal Square'}] |
1003 | { 'first_name': 'marry', 'last_name': 'kate', 'gender': 'female' } | [{ 'zip': '10001', 'city': 'new york' }, { 'zip': '10008', 'city': 'brooklyn' }] |
上面给出的这个表的列中有一些字典和列表。通常,您要做的是使用pd.io.json.json_normalize
函数来扩展字典。但是,在列中有NaN
值的情况下,pd.io.json.json_normalize
会对NaN
值抛出AttributeError
错误,因为它们不是同一类型。flat_table
是一个围绕json_normalize
函数的包装器,它扩展了它对NaN
值更健壮的能力,而且,它按行展开列表,以便更清楚地查看信息。在
对于上表,应用flat_table.normalize
后的展平表如下所示。在
1.1.0版的新增功能
dicts和list的扩展是可选的。现在,您可以选择使用normalize函数展开列表类型和dict类型。在
flat_table.normalize(df,expand_dicts=False,expand_lists=True)
df的规范化版本如下。在
index | id | user_info | address.address1 | address.city | address.zip | |
---|---|---|---|---|---|---|
0 | 0 | 1001 | {...} | nan | clifton | 07014 |
1 | 1 | 1002 | nan | 1 Journal Square | nan | 07014 |
2 | 2 | 1003 | {...} | nan | new york | 10001 |
3 | 2 | 1003 | {...} | nan | brooklyn | 10008 |
它是如何工作的?
基本上,flat_table
将查找数据帧中的每个序列,以了解它包含的数据类型。在
对于每个系列,它都会创建一个关于如何扩展它的信息列表。它将进入所有字典和所有级别的所有列表,并将它们展开为行和列。字典keys
将用于列名,giden数据帧的index
将用于行扩展。在
如果要查看列是如何映射的,可以使用flat_table.mapper
函数获取原始数据帧中列的所有信息。例如,对于上表,mapper函数将提供下表。在
parent | child | type | obj | |
---|---|---|---|---|
0 | . | id | int | ... |
1 | . | user_info | dict | ... |
2 | user_info | user_info.gender | str | ... |
3 | user_info | user_info.phones.home | str | ... |
4 | user_info | user_info.phones.mobile | str | ... |
5 | user_info | user_info.last_name | str | ... |
6 | user_info | user_info.first_name | str | ... |
7 | . | address | list | ... |
8 | address | dict | ... | |
9 | address | address.address1 | str | ... |
10 | address | address.city | str | ... |
11 | address | address.zip | str | ... |
许可证
许可证是指根据您的意愿,以您想要的任何方式使用它:笑脸:。在
作者
- 项目
标签: