首页 > 解决方案 > 如何根据导入的嵌套 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也不是。

标签: pythonregexpandas

解决方案


可以使用拆分,但通常数据可能重复列名,因此如果选择一列,例如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('^[^.]+[.]','')

推荐阅读