使用新密钥的Pandas DataFrame到Dict格式

时间:2015-11-13 20:08:21

标签: python json dictionary pandas

转换此内容的最佳方法是什么:

/usr/bin/touch -c /home-folder/Library/Developer/Xcode/DerivedData/.../Build/Products/Coverage-iphonesimulator/Tests.xctest    ** TEST FAILED **

进入这个:

                               deviceid devicetype
0  b569dcb7-4498-4cb4-81be-333a7f89e65f     Google
1  04d3b752-f7a1-42ae-8e8a-9322cda4fd7f    Android
2  cf7391c5-a82f-4889-8d9e-0a423f132026    Android

我尝试过df.to_dict(),但这只是给出了:

0 {"deviceid":"b569dcb7-4498-4cb4-81be-333a7f89e65f","devicetype":["Google"]}
1 {"deviceid":"04d3b752-f7a1-42ae-8e8a-9322cda4fd7f","devicetype":["Android"]}
2 {"deviceid":"cf7391c5-a82f-4889-8d9e-0a423f132026","devicetype":["Android"]}

2 个答案:

答案 0 :(得分:2)

您可以使用to_json申请

In [11]: s = df.apply((lambda x: x.to_json()), axis=1)

In [12]: s[0]
Out[12]: '{"deviceid":"b569dcb7-4498-4cb4-81be-333a7f89e65f","devicetype":"Google"}'

要获取设备类型的列表,您可以手动执行此操作:

In [13]: s1 = df.apply((lambda x: {"deviceid": x["deviceid"], "devicetype": [x["devicetype"]]}), axis=1)

In [14]: s1[0]
Out[14]: {'deviceid': 'b569dcb7-4498-4cb4-81be-333a7f89e65f', 'devicetype': ['Google']}

答案 1 :(得分:1)

要扩展上一个答案to_dict(),应该比to_json()

快一点

对于较大的测试数据框,这似乎是正确的,但对于您提供的示例,to_dict()方法实际上要慢一些。

大型测试集

In [1]: %timeit s = df.apply((lambda x: x.to_json()), axis=1)
Out[1]: 100 loops, best of 3: 5.88 ms per loop

In [2]: %timeit s = df.apply((lambda x: x.to_dict()), axis=1)
Out[2]: 100 loops, best of 3: 3.91 ms per loop

提供示例

In [3]: %timeit s = df.apply((lambda x: x.to_json()), axis=1)
Out[3]: 1000 loops, best of 3: 375 µs per loop

In [4]: %timeit s = df.apply((lambda x: x.to_dict()), axis=1)
Out[4]: 1000 loops, best of 3: 450 µs per loop