Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将pandas.DataFrame转换为Python中的词典列表_Python_Json_Pandas_Dictionary_Dataframe - Fatal编程技术网

将pandas.DataFrame转换为Python中的词典列表

将pandas.DataFrame转换为Python中的词典列表,python,json,pandas,dictionary,dataframe,Python,Json,Pandas,Dictionary,Dataframe,我有一个从数据帧转换而来的字典,如下所示: a = d.to_json(orient='index') 字典: {"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}} 我需要的是它在一个列表中,所以本质上是一个字典列表。 所以我只添加了一个[],因为这是代码其余部分要使用的格式 inpu

我有一个从数据帧转换而来的字典,如下所示:

a = d.to_json(orient='index')
字典:

{"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}}

我需要的是它在一个列表中,所以本质上是一个字典列表。 所以我只添加了一个[],因为这是代码其余部分要使用的格式

input_dict = [a]
输入命令:

['
{"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}}
']
我需要在[和]之前删除单引号。另外,以列表的形式提供PKID值

如何做到这一点

预期产出:

[ {"yr":2017,"PKID":[58306, 57011],"Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":[1234,54321],"Subject":"XYZ","ID":"T002"} ]
注意:PKID列有多个整数值,它们必须是整数的升序。字符串是不可接受的。 所以我们需要像“PKID”:[5830657011]而不是“PKID”:“[5830657011]”

这里有一种方法:

from collections import OrderedDict

d = {"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}}

list(OrderedDict(sorted(d.items())).values())

# [{'ID': 'T001', 'PKID': '58306, 57011', 'Subject': 'ABC', 'yr': 2017},
#  {'ID': 'T002', 'PKID': '1234,54321', 'Subject': 'XYZ', 'yr': 2018}]

注意:按提供的文本字符串键对已排序词典进行排序。在通过
d={int(k):v代表k,v代表d.items()}

进行任何处理之前,您可能希望首先将这些转换为整数。您正在将词典转换为字符串形式的
json
。然后将结果字符串包装为一个列表。因此,结果自然是列表中的一个字符串


试试看:
[d]
其中
d
是您的原始字典(未转换
json

),您可以使用列表

Ex:

d = {"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}}
print [{k: v} for k, v in d.items()]
[{'1': {'PKID': '1234,54321', 'yr': 2018, 'ID': 'T002', 'Subject': 'XYZ'}}, {'0': {'PKID': '58306, 57011', 'yr': 2017, 'ID': 'T001', 'Subject': 'ABC'}}]
输出:

d = {"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":{"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}}
print [{k: v} for k, v in d.items()]
[{'1': {'PKID': '1234,54321', 'yr': 2018, 'ID': 'T002', 'Subject': 'XYZ'}}, {'0': {'PKID': '58306, 57011', 'yr': 2017, 'ID': 'T001', 'Subject': 'ABC'}}]

pandas.DataFrame.to_json
返回字符串(json字符串),而不是字典。请尝试:


像这样的东西怎么样:

from operator import itemgetter

d = {"0":{"yr":2017,"PKID":"58306, 57011","Subject":"ABC","ID":"T001"},"1":
    {"yr":2018,"PKID":"1234,54321","Subject":"XYZ","ID":"T002"}}

sorted_d = sorted(d.items(), key=lambda x: int(x[0]))

print(list(map(itemgetter(1), sorted_d)))
哪些产出:

[{'yr': 2017, 'PKID': '58306, 57011', 'Subject': 'ABC', 'ID': 'T001'}, 
 {'yr': 2018, 'PKID': '1234,54321', 'Subject': 'XYZ', 'ID': 'T002'}]

dicts是无序的,因此这不会保留键隐含的(最终)顺序…可能不是OP的问题…关闭但不完全在那里-这里键是字符串,因此您将获得词汇顺序(即:
排序([“1”、“2”、“10”、“11”)
=>
['1”、“10”、“11”、“2']
)。您想在IMHO之前将键转换为int;)正如我最初提到的:这“可能是OP的问题,也可能不是”-但我们实际上不知道,因为OP没有发布准确的预期输出(显然每个人的解释都不同);)我只是想说明一下,第一种解决方案最终将松散排序,第二种解决方案将使用词汇排序而不是数字排序,仅此而已。谢谢,还有一种方法可以避免索引值采用相同的格式吗?就像:[{“yr”:2017,“PKID”:“5830657011”,“主题”:“ABC”,“ID”:“T001”},{“yr”:2018,“PKID”:“123454321”,“主题”:“XYZ”,“ID”:“T002”}]@ShankarPandey我添加了另一个例子谢谢。是否有一种方法也可以将一列值作为列表。因此,如果col2有两个用逗号分隔的整数,我们如何在下面举例:[{'col1':1,'col2':[3,4]},{'col1':2,'col2':[5,6]}]@ShankarPandey只是在列表中迭代并转换您的值:
d['PKID']=list(map(int,d['PKID'].split(','))
“我需要的是它在一个列表中,所以本质上是一个字典列表”:抱歉,这还不足以保证正确答案-请发布您期望的确切结果。感谢您突出显示它,布鲁诺,我现在添加了预期结果。