pandas json_normalize函数的更广泛实现。

flat-table的Python项目详细描述


平面表:字典和列表规范化器

此包是pandasdataframe对象的规范化器,其列中包含dictionary或list对象。这个库将把数据类型在(list,dict)中的所有列展开为单独的行和列。在

PS:展开列表时,flattable将使用dataframe的当前索引作为标识符。输出将具有原始数据帧的索引列。如果你不打算用的话,你可以以后再把它放下。在

安装

要安装,请使用pip。在

pip install flat-table

如何使用

从给定的pandas数据帧中,将使用dataframe的index来创建单独的列和行。在

^{pr2}$
importflat_tableflat_table.normalize(df)

这将把字典中的所有键作为列,并将所有列表作为单独的行。在

示例插图

假设您有一个如下形状的数据帧。在

iduser_infoaddress
1001{ 'first_name': 'john', 'last_name': 'smith', 'phones': {'mobile': '201-..', 'home': '978-..'} }[{ 'zip': '07014', 'city': 'clifton' }]
1002NaN[{'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后的展平表如下所示。在

^{tb2}$

1.1.0版的新增功能

dicts和list的扩展是可选的。现在,您可以选择使用normalize函数展开列表类型和dict类型。在

flat_table.normalize(df,expand_dicts=False,expand_lists=True)

df的规范化版本如下。在

indexiduser_infoaddress.address1address.cityaddress.zip
001001{...}nanclifton07014
111002nan1 Journal Squarenan07014
221003{...}nannew york10001
321003{...}nanbrooklyn10008

它是如何工作的?

基本上,flat_table将查找数据帧中的每个序列,以了解它包含的数据类型。在

对于每个系列,它都会创建一个关于如何扩展它的信息列表。它将进入所有字典和所有级别的所有列表,并将它们展开为行和列。字典keys将用于列名,giden数据帧的index将用于行扩展。在

如果要查看列是如何映射的,可以使用flat_table.mapper函数获取原始数据帧中列的所有信息。例如,对于上表,mapper函数将提供下表。在

parentchildtypeobj
0.idint...
1.user_infodict...
2user_infouser_info.genderstr...
3user_infouser_info.phones.homestr...
4user_infouser_info.phones.mobilestr...
5user_infouser_info.last_namestr...
6user_infouser_info.first_namestr...
7.addresslist...
8addressdict...
9addressaddress.address1str...
10addressaddress.citystr...
11addressaddress.zipstr...

许可证

许可证是指根据您的意愿,以您想要的任何方式使用它:笑脸:。在

作者

生成者@metinsenturk

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ws-consumer服务地址中的java动态属性   java如何比较整数列表,然后按升序排序?   javascript我正在使用java脚本调用一个函数,但它没有调用代码下面的方法,也没有调用secretitnames()函数   在文本窗格中多次使用Java insertIcon图标   JavaMSAL安卓。AuthenticationActivity完成,但用于身份验证请求的线程池线程仍处于等待状态   if语句中的java多范围比较   java toString()表示输出   java如何在jcstrest测试中生成指令重新排序   java我怎样才能运行它?   web应用程序中使用Hibernate和Spring的java问题   如何将字符串数据写入Java文本文件   如何在java命令提示符下运行已签名的jar文件?   java从我的菜单调用RCP应用程序   java如何等待Canvas/GraphicsContext完成任务,然后再继续执行代码块?