我正在尝试将嵌套的json文件读入Pandas。可以在以下位置找到该文件:European Bank Authorities
我解压缩文件,然后阅读文件。第一行是这样的:
CA_OwnerID EntityCode EntityType Properties Services __EBA_EntityVersion
0 GB_FCA PSD_EMI!GB_FCA!900924 PSD_EMI [{'ENT_NAT_REF_COD': '900924'}, {'ENT_NAM': 'N... [{'GB': ['ES_010', 'PS_010', 'PS_020', 'PS_03A... 20190820191050544
“属性”和“服务”列就是问题所在。
第一行的属性如下:
[{'ENT_NAT_REF_COD': 'C185005'},
{'ENT_NAM': 'Paysafe Prepaid Services Limited'},
{'ENT_ADD': 'Grand Canal House, Upper Grand Canal Street'},
{'ENT_TOW_CIT_RES': 'Dublin 4'},
{'ENT_POS_COD': 'DO4 Y7R5'},
{'ENT_COU_RES': 'IE'},
{'ENT_AUT': ['2019-03-04']}]
第一行的服务如下:
[{'IE': ['ES_010', 'PS_010', 'PS_020', 'PS_03B', 'PS_05A', 'PS_05B']},
{'AT': ['ES_010', 'PS_010', 'PS_020', 'PS_03B', 'PS_05A', 'PS_05B']},
{'BE': ['ES_010', 'PS_010', 'PS_020', 'PS_03B', 'PS_05A', 'PS_05B']},
and it keeps on like this
属性和服务对于数据中的所有行都包含不同数量的字段。
我需要将所有内容都放入一个Pandas表中,同时扩展了Properties和Services。
所以我试试这个:
prop = json_normalize(data=data[1], record_path='Properties',
meta=['ENT_NAT_REF_COD', 'ENT_NAM','ENT_ADD','ENT_TOW_CIT_RES', 'ENT_POS_COD', 'ENT_COU_RES', 'ENT_AUT', 'ENT_NAM_COM', 'ENT_EXC', 'ENT_DES_ACT_EXC_SCP', 'ENT_TYP_PAR_ENT','ENT_COD_PAR_ENT','DER_CHI_ENT_AUT'], record_prefix='_', errors='ignore')
它扩展了行数,因为它在所有列中都提供nan,每行除外。因此,无法将其连接回主表。因此,行数从原始数据集中的189981行扩展到1701771行。
所以我尝试了这个:
Properties = df['Properties'].apply(pd.Series)
Services = df['Services'].apply(pd.Series)
合并时:
result = pd.concat([df, Properties, Services], axis=1, sort=False)
这些列包含不同的数据。一列可能包含一行:{'ENT_TOW_CIT_RES': 'London'}
,而下一行应包含在另一列中:{'ENT_ADD': ['207 Regent Street', '3rd Floor']}
如何在一个大的Pandas数据框中(每个列仅包含一种类型的信息)获得此信息?
此代码有效:
for i in range(0,len(df_head)):
print(i)
for y in df_head['Properties'][i]:
print(list(y.keys())[0])
print(list(y.values())[0])
df_head.at[i, list(y.keys())[0]] = str(list(y.values())[0])
for y in df_head['Services'][i]:
print(list(y.keys())[0])
print(list(y.values())[0])
df_head.at[i, list(y.keys())[0]] = str(list(y.values())[0])
但是,可能要花一周的时间。所以我希望有更好的方法?