python - 如何根据导入的嵌套 json 改进删除 pandas df 列名前缀?
问题描述
情况
将嵌套json
导入 pandas 我得到以下df
带有前缀列名的示例,其设计目的是避免重复的列标题。
import pandas as pd
import re
df = pd.DataFrame({'id': [1,2,3,4],
'product': ['a','b','c','d'],
'basic.productType':[1,2,3,4],
'basic.price':[100,200,300,400],
'location.city':['Bremen', 'Hamburg','Berlin','Karlsruhe'],
'location.city.zip':[1,2,3,4]
})
我还使用此regex
解决方案来摆脱第一级前缀(在这种情况下,所有字符包括分隔符 a.
并且仅用于第一次出现):
df.columns = [re.sub('^[^.]+[.]','', name) for name in df.columns]
所以列看起来像这样,删除前缀后:
['id', 'product', 'productType', 'price', 'city', 'city.zip']
问题
您是否可以建议改进我的通用解决方案(不使用前缀列表)?因为我不太熟悉,regex
也许有更简单的解决方案,regex
也不是。
解决方案
可以使用拆分,但通常数据可能重复列名,因此如果选择一列,例如df['col']
获取所有列col
:
.
编辑:您可以使用in拆分值Index.where
df.columns = df.columns.where(~df.columns.str.contains('\.'),
df.columns.str.split('.', n=1).str[1])
print (df)
id product productType price city city.zip
0 1 a 1 100 Bremen 1
1 2 b 2 200 Hamburg 2
2 3 c 3 300 Berlin 3
3 4 d 4 400 Karlsruhe 4
或者:
df = df.rename(columns=lambda x: x.split('.', 1)[1] if '.' in x else x)
您的解决方案的替代方案str.replace
:
df.columns = df.columns.str.replace('^[^.]+[.]','')
推荐阅读
- visual-studio - 通过命令提示符为 Visual Studio 部署项目创建构建
- mysql - 为什么同一查询会得到不同的输出?
- java - 安全地从 Spring 后面反应前面。安全不允许查看主页
- angular - Angular 8如何根据所选材料选项卡更改材料日期选择器的提供者?
- angular - Excel导出将日期时间视为数字
- javascript - 使用 MediaSource 在 React 组件中流式传输视频文件
- c - 无法掌握 fscanf 在我的程序中读取浮点数的方式
- maven - 在 JAR 资源中包含 Maven 站点 HTML 页面
- flutter - 将 html5 视频流后端用于 Flutter 应用程序?
- java - android检查是否以编程方式启用了“允许声音”通知设置