web-dev-qa-db-ja.com

pandas.DataFrameをPython

以下のようにデータフレームから変換された辞書があります:

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]

input_dict:

['
{"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」:[58306、57011]ではなく、「PKID」:[58306、57011]のようにする必要があります。

11
Shankar Pandey

pandas.DataFrame.to_jsonは、辞書ではなく文字列(JSON文字列)を返します。試してみてください to_dict 代わりに:

>>> df
   col1  col2
0     1     3
1     2     4
>>> [df.to_dict(orient='index')]
[{0: {'col1': 1, 'col2': 3}, 1: {'col1': 2, 'col2': 4}}]
>>> df.to_dict(orient='records')
[{'col1': 1, 'col2': 3}, {'col1': 2, 'col2': 4}]
16
Norrius

ここに1つの方法があります:

_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 for k, v in d.items()}による処理の前に、まずこれらを整数に変換することをお勧めします。

3
jpp

このようなものはどうですか:

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'}]
0
RoadRunner

辞書を文字列であるjsonに変換しています。次に、結果の文字列をリストでラップします。したがって、当然、結果はリスト内の文字列になります。

代わりに試してください:[d]ここで、dは未加工の辞書です(変換されませんjson

0
Ryan

リスト内包表記を使用できます

例:

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'}}]
0
Rakesh