将包含字典列表的列的pandas数据框转换为元组的元组

时间:2020-05-11 03:12:02

标签: python pandas

colA    colB    colC
-36.10342651    -62.17990636    [{lat:-36.10342650837965,lng:-62.179906361743},{lat:-36.108743958442865,lng:-62.17361161411073},{lat:-36.1167965139411,lng:-62.18381673356545},{lat:-36.11159519706228,lng:-62.19034991799284}]
-36.10342651    -62.17990636    [{lat:-36.10342650837965,lng:-62.179906361743},{lat:-36.108743958442865,lng:-62.17361161411073},{lat:-36.1167965139411,lng:-62.18381673356545},{lat:-36.11159519706228,lng:-62.19034991799284}]
-36.10342651    -62.17990636    [{lat:-36.10342650837965,lng:-62.179906361743},{lat:-36.108743958442865,lng:-62.17361161411073},{lat:-36.1167965139411,lng:-62.18381673356545},{lat:-36.11159519706228,lng:-62.19034991799284}]

我想将以上数据框中的colC中的每一行转换为: ((-36.10342650837965 -62.179906361743,-36.108743958442865 -62.17361161411073,-36.1167965139411 -62.18381673356545,-36.11159519706228 -62.19034991799284))

我可以像这样将字典列表转换为元组,但是无法得到正确的输出:

dict_list = [(key, )+tuple(val) for dic in ini_list  
                       for key, val in dic.items()] 

1 个答案:

答案 0 :(得分:2)

您可以对chain.from_iterable使用列表推导:

from itertools import chain

df["new"] = [(tuple(chain.from_iterable(s.values() for s in i)),) for i in df["colC"]]

print (df)

        colA       colB                                               colC                                                new
0 -36.103427 -62.179906  [{'lat': -36.10342650837965, 'lng': -62.179906...  ((-36.10342650837965, -62.179906361743, -36.10...
1 -36.103427 -62.179906  [{'lat': -36.10342650837965, 'lng': -62.179906...  ((-36.10342650837965, -62.179906361743, -36.10...
2 -36.103427 -62.179906  [{'lat': -36.10342650837965, 'lng': -62.179906...  ((-36.10342650837965, -62.179906361743, -36.10...