我有一个数据框架,我想生成一个报告,但似乎得到的错误,我无法找出如何修复。这是我的数据框架
Unnamed: 0 COMPANY rNAME DATE_START DATEFINISH tID LABEL
0 0 MOM 11 UNIT A 8/9/2021 8/23/2021 36350000 UNIT 5H
1 1 MOM 7 UNIT A 8/9/2021 8/23/2021 36350000 UNIT 5H
2 2 DAD 7H A 7/7/2021 7/27/2021 36350000 UNIT 5H
3 3 MOM 13 UNIT A 8/9/2021 8/23/2021 36350000 UNIT 5H
4 4 MOM 9 UNIT A 8/9/2021 8/23/2021 36350000 UNIT 5H
5 5 DAD 4H A 7/7/2021 7/27/2021 36350000 UNIT 5H
6 6 DAD 8H A 7/7/2021 7/27/2021 27690000 UNIT 2H
7 7 DAD 5H A 7/7/2021 7/27/2021 27690000 UNIT 2H
8 8 DAD 7H A 7/7/2021 7/27/2021 27690000 UNIT 2H
9 9 DAD 4H A 7/7/2021 7/27/2021 27690000 UNIT 2H
那么我得到错误的代码是
jdata = df.groupby(["COMPANY", "rNAME","DATE_START", "DATEFINISH"], as_index=False)
.apply(lambda x: x[['tID','LABEL']].to_dict('r')).reset_index().rename(columns={0: "MDATA"}).to_json(orient='records')
那么我想对结果做的是
jsonObject = json.loads(jdata)
for i in jsonObject:
print (i[COMPANY])
print (i[rNAME])
print (i[DATE_START])
print (i[DATEFINISH])
for p in i["MDATA"]:
print (p[tID])
得到的错误是
ValueError: 1 columns passed, passed data had 2 columns
我知道这与字典有关,但我不确定如何修复
我也相信它与数据有关,有时当我收到数据时它工作正常,其他时候我得到x列通过错误。
我在这里看了好几天了,还没有找到解决我的问题,从两个其他的列创建一个字典列,导致这样的错误
这看起来像你正在做的稍微调整:
- 获取一系列字典列表(即没有
as_index=False
)- 您还可以通过直接 指定组上的列
- 重命名系列,重置索引获取所有数据
- 转换为json
>>> dicts = df.groupby(['COMPANY', 'rNAME', 'DATE_START', 'DATEFINISH'])[['tID','LABEL']].apply(lambda x: x.to_dict('r'))
>>> dicts
COMPANY rNAME DATE_START DATEFINISH
DAD 4H A 7/7/2021 7/27/2021 [{'tID': 36350000, 'LABEL': 'UNIT 5H'}, {'tID'...
5H A 7/7/2021 7/27/2021 [{'tID': 27690000, 'LABEL': 'UNIT 2H'}]
7H A 7/7/2021 7/27/2021 [{'tID': 36350000, 'LABEL': 'UNIT 5H'}, {'tID'...
8H A 7/7/2021 7/27/2021 [{'tID': 27690000, 'LABEL': 'UNIT 2H'}]
MOM 11 UNIT A 8/9/2021 8/23/2021 [{'tID': 36350000, 'LABEL': 'UNIT 5H'}]
13 UNIT A 8/9/2021 8/23/2021 [{'tID': 36350000, 'LABEL': 'UNIT 5H'}]
7 UNIT A 8/9/2021 8/23/2021 [{'tID': 36350000, 'LABEL': 'UNIT 5H'}]
9 UNIT A 8/9/2021 8/23/2021 [{'tID': 36350000, 'LABEL': 'UNIT 5H'}]
dtype: object
>>> jdata = dicts.rename('MDATA').reset_index().to_json(orient='records')
如果将indent=True
传递给to_json()
,则输出如下:
>>> print(jdata[:500])
[
{
"COMPANY":"DAD",
"rNAME":"4H A",
"DATE_START":"7/7/2021",
"DATEFINISH":"7/27/2021",
"MDATA":[
{
"tID":36350000,
"LABEL":"UNIT 5H"
},
{
"tID":27690000,
"LABEL":"UNIT 2H"
}
]
},
{
"COMPANY":"DAD",
"rNAME":"5H A",
"DATE_START":"7/7/2021",
"DATEFINISH":"7/27/2021",
"MDATA":[
{
"tID":27690000,
"LABEL":"UNIT 2H"
}
]
},
{
"COMPANY":"DAD",
"rNAME":"7H A",
"DATE_START":"7/7/2021",
"DATEFINISH":"7/27/2021",
"M
尝试不使用as_index=False
的groupby
:
jdata = df.groupby(["COMPANY", "rNAME","DATE_START", "DATEFINISH"])['tID','LABEL']
.apply(lambda x: x.to_dict('r'))
.reset_index(name="MDATA")
.to_dict(orient='records')
for i in jdata:
for key in ["COMPANY", "rNAME", "DATE_START", "DATEFINISH"]:
print(i[key], end=" ")
for p in i["MDATA"]:
print(p["tID"], end=" ")
print()
DAD 4H A 7/7/2021 7/27/2021 36350000 27690000
DAD 5H A 7/7/2021 7/27/2021 27690000
DAD 7H A 7/7/2021 7/27/2021 36350000 27690000
DAD 8H A 7/7/2021 7/27/2021 27690000
MOM 11 UNIT A 8/9/2021 8/23/2021 36350000
MOM 13 UNIT A 8/9/2021 8/23/2021 36350000
MOM 7 UNIT A 8/9/2021 8/23/2021 36350000
MOM 9 UNIT A 8/9/2021 8/23/2021 36350000
对代码的其他更改:
- 指定
groupby
语句中使用的列 - 在
reset_index
中重命名结果列 - 直接转换为
dict
而不是json