Python 数据框中包含分号数据的字典
我从web上收集了一些数据,我想把这些数据放到一个数据框中 刮取的json数据采用以下格式:Python 数据框中包含分号数据的字典,python,pandas,Python,Pandas,我从web上收集了一些数据,我想把这些数据放到一个数据框中 刮取的json数据采用以下格式: [{"attributes":{"OBJECTID":0,"dt_notific;dt_inicio_sintomas;bairro_resid__estadia;ap_residencia_estadia;evolu\ufffd\ufffdo;dt_\ufffdbito;CEP;Data_atualiza\ufffd\ufffdo":&quo
[{"attributes":{"OBJECTID":0,"dt_notific;dt_inicio_sintomas;bairro_resid__estadia;ap_residencia_estadia;evolu\ufffd\ufffdo;dt_\ufffdbito;CEP;Data_atualiza\ufffd\ufffdo":"06/05/2020;06/05/2020;CACHAMBI;3.2;\ufffdbito;07/05/2020;20771330;11/07/2020"}},{"attributes":{"OBJECTID":1,"dt_notific;dt_inicio_sintomas;bairro_resid__estadia;ap_residencia_estadia;evolu\ufffd\ufffdo;dt_\ufffdbito;CEP;Data_atualiza\ufffd\ufffdo":"06/05/2020;05/05/2020;TIJUCA;2.2;\ufffdbito;12/05/2020;20261120;11/07/2020"}},{"attributes":{"OBJECTID":2,"dt_notific;dt_inicio_sintomas;bairro_resid__estadia;ap_residencia_estadia;evolu\ufffd\ufffdo;dt_\ufffdbito;CEP;Data_atualiza\ufffd\ufffdo":"25/04/2020;25/04/2020;JACAREPAGUA;4.0;\ufffdbito;25/04/2020;22753211;11/07/2020"}}
(...)
我想实现一个熊猫数据帧,其信息类似于:
0 dt_notific 50613 non-null object
1 dt_inicio_sintomas 50603 non-null object
2 bairro_resid__estadia 50640 non-null object
3 ap_residencia_estadia 50640 non-null float64
4 evolucao 50640 non-null object
5 dt_obito 4727 non-null object
6 CEP 50640 non-null int64
7 dt_registro 50640 non-null object
直到现在,我只能通过将数据保存在文件中并使用文本编辑器执行疯狂的操作来实现这一点
我可以通过编程做些什么来实现相同的结果?
我唯一感兴趣的数据是与用分号划分的大键相关的数据;(值本身也是分号分隔的)将列表定义为多行字符串,将
u\ufffd
替换为?
,加载为JSON
,
循环键和值,有条件地保存到列表,最后使用这些列表创建数据帧:
import json
import pandas as pd
val = r"""
[
{
"attributes": {
"OBJECTID": 0,
"dt_notific;dt_inicio_sintomas;bairro_resid__estadia;ap_residencia_estadia;evolu\ufffd\ufffdo;dt_\ufffdbito;CEP;Data_atualiza\ufffd\ufffdo":
"06/05/2020;06/05/2020;CACHAMBI;3.2;\ufffdbito;07/05/2020;20771330;11/07/2020"
}
},
{
"attributes": {
"OBJECTID": 1,
"dt_notific;dt_inicio_sintomas;bairro_resid__estadia;ap_residencia_estadia;evolu\ufffd\ufffdo;dt_\ufffdbito;CEP;Data_atualiza\ufffd\ufffdo":
"06/05/2020;05/05/2020;TIJUCA;2.2;\ufffdbito;12/05/2020;20261120;11/07/2020"
}
},
{
"attributes": {
"OBJECTID": 2,
"dt_notific;dt_inicio_sintomas;bairro_resid__estadia;ap_residencia_estadia;evolu\ufffd\ufffdo;dt_\ufffdbito;CEP;Data_atualiza\ufffd\ufffdo":
"25/04/2020;25/04/2020;JACAREPAGUA;4.0;\ufffdbito;25/04/2020;22753211;11/07/2020"
}
}
]
""".replace(r"u\ufffd", "?").replace(r"\ufffd", "?")
j = json.loads(val)
i = 0
k = 0
index = []
col = []
for line in j:
for v in line.values():
for key, value in v.items():
# print(key, value)
if i % 2 == 0:
index.append(value)
else:
col.append(key.split(';')[k])
k += 1
i += 1
df = pd.DataFrame(col,
index=index
)
print(df)
返回:
0
0 dt_notific
1 dt_inicio_sintomas
2 bairro_resid__estadia
将列表定义为多行字符串,将
u\ufffd
替换为?
,加载为JSON
,
循环键和值,有条件地保存到列表,最后使用这些列表创建数据帧:
import json
import pandas as pd
val = r"""
[
{
"attributes": {
"OBJECTID": 0,
"dt_notific;dt_inicio_sintomas;bairro_resid__estadia;ap_residencia_estadia;evolu\ufffd\ufffdo;dt_\ufffdbito;CEP;Data_atualiza\ufffd\ufffdo":
"06/05/2020;06/05/2020;CACHAMBI;3.2;\ufffdbito;07/05/2020;20771330;11/07/2020"
}
},
{
"attributes": {
"OBJECTID": 1,
"dt_notific;dt_inicio_sintomas;bairro_resid__estadia;ap_residencia_estadia;evolu\ufffd\ufffdo;dt_\ufffdbito;CEP;Data_atualiza\ufffd\ufffdo":
"06/05/2020;05/05/2020;TIJUCA;2.2;\ufffdbito;12/05/2020;20261120;11/07/2020"
}
},
{
"attributes": {
"OBJECTID": 2,
"dt_notific;dt_inicio_sintomas;bairro_resid__estadia;ap_residencia_estadia;evolu\ufffd\ufffdo;dt_\ufffdbito;CEP;Data_atualiza\ufffd\ufffdo":
"25/04/2020;25/04/2020;JACAREPAGUA;4.0;\ufffdbito;25/04/2020;22753211;11/07/2020"
}
}
]
""".replace(r"u\ufffd", "?").replace(r"\ufffd", "?")
j = json.loads(val)
i = 0
k = 0
index = []
col = []
for line in j:
for v in line.values():
for key, value in v.items():
# print(key, value)
if i % 2 == 0:
index.append(value)
else:
col.append(key.split(';')[k])
k += 1
i += 1
df = pd.DataFrame(col,
index=index
)
print(df)
返回:
0
0 dt_notific
1 dt_inicio_sintomas
2 bairro_resid__estadia
感谢古斯塔夫·拉斯穆森,他给了我解决这个问题的方法 他的回答有一些我不知道的重要见解(比如使用模块2“%2”只获取我需要的字段并丢弃OBJECTID字段) 我对他的代码做了一些调整,现在一切都按照我的预期进行。最后的代码是
j2Str = json.dumps(j2)
val = j2Str.replace(r"u\ufffd", "?").replace(r"\ufffd", "?")
j = json.loads(val)
i = 0
listoflists = []
a_list = []
for line in j:
for v in line.values():
for key, value in v.items():
# print(key, value)
if i % 2 == 0:
a_list = value.split(';')
listoflists.append(a_list[:])
i += 1
df = pandas.DataFrame(numpy.array(listoflists),
columns=["dt_notific","dt_inicio_sintomas","bairro_resid__estadia","ap_residencia_estadia","evolcao","dt_obito","CEP","Data_atualizacao"])
print(df.info())
以及生成的数据帧信息:
0 dt_notific 2000 non-null object
1 dt_inicio_sintomas 2000 non-null object
2 bairro_resid__estadia 2000 non-null object
3 ap_residencia_estadia 2000 non-null object
4 evolcao 2000 non-null object
5 dt_obito 2000 non-null object
6 CEP 2000 non-null object
7 Data_atualizacao 2000 non-null object
感谢古斯塔夫·拉斯穆森,他给了我解决这个问题的方法 他的回答有一些我不知道的重要见解(比如使用模块2“%2”只获取我需要的字段并丢弃OBJECTID字段) 我对他的代码做了一些调整,现在一切都按照我的预期进行。最后的代码是
j2Str = json.dumps(j2)
val = j2Str.replace(r"u\ufffd", "?").replace(r"\ufffd", "?")
j = json.loads(val)
i = 0
listoflists = []
a_list = []
for line in j:
for v in line.values():
for key, value in v.items():
# print(key, value)
if i % 2 == 0:
a_list = value.split(';')
listoflists.append(a_list[:])
i += 1
df = pandas.DataFrame(numpy.array(listoflists),
columns=["dt_notific","dt_inicio_sintomas","bairro_resid__estadia","ap_residencia_estadia","evolcao","dt_obito","CEP","Data_atualizacao"])
print(df.info())
以及生成的数据帧信息:
0 dt_notific 2000 non-null object
1 dt_inicio_sintomas 2000 non-null object
2 bairro_resid__estadia 2000 non-null object
3 ap_residencia_estadia 2000 non-null object
4 evolcao 2000 non-null object
5 dt_obito 2000 non-null object
6 CEP 2000 non-null object
7 Data_atualizacao 2000 non-null object
我看不到JSONScraped中的值
50613
,意思是扔掉。您的意思是scrapedI没有看到JSONScraped means中的值50613
。你是说非常感谢你的帮助古斯塔夫,不幸的是我仍然有麻烦。我得到了一个超出范围的错误,可能是因为我废弃的数据在一个列表对象(下面的j2)中,我无法使用“”将其转换为多行字符串。我尝试使用缩进进行修饰,但仍然得到相同的错误col.append(key.split(“;”)[k])indexer:list index超出范围我尝试的是:j2=j['features']j2Str=json.dumps(j2)val=j2Str.replace(r“u\ufffd”,“?”).replace(r“\ufffd”,“?”)val=json.dumps(json.loads(val),indent=4)j=json.loads(val)非常感谢你的帮助,不幸的是,我仍然有麻烦。我收到一个超出范围的错误,可能是因为我废弃的数据在一个列表对象中(下面的j2)我无法使用“”将其转换为多行字符串我尝试使用缩进进行修饰,但仍然得到相同的错误col.append(key.split(“;”)[k])indexer:list index超出范围我尝试过的:j2=j['features']j2Str=json.dumps(j2)val=j2Str.replace(r“u\ufffd”,“?”).replace(r“\ufffd”,“?”)val=json.dumps(json.loads(val),indent=4)j=json.loads(val)