pandas 调整 Dataframe 的大小以考虑从列中的json提取的新值

fjnneemd  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(101)

我已经通过github API提取了数据,然后使用json.normalise将数据扁平化为 Dataframe 。不幸的是,一些数据仍然在列中的嵌套字典中。我可以从字典中提取值,但当单元格中有多个字典时,问题就出现了。

我如何操作 Dataframe ,使其调整大小,以考虑到额外的值。
就像这样:

2hh7jdfx

2hh7jdfx1#

为了重现你的问题,让我们假设我们有这样的 Dataframe :

import pandas as pd

df = pd.DataFrame({'ID': [1, 2],
                   'Pull.Request.Files.Nodes': [[{'path':'example 1'}], [{'path':'example 2'}, {'path':'example 3'}]],
                   })
df
   ID                        Pull.Request.Files.Nodes
0   1                         [{'path': 'example 1'}]
1   2  [{'path': 'example 2'}, {'path': 'example 3'}]

我们可以分解列'Pull.Request.Files.Nodes'来从list中提取字典,然后我们可以应用一个lambda函数,如下所示:

df = df.explode('Pull.Request.Files.Nodes', ignore_index=True)
df['Pull.Request.Files.Nodes'] = df['Pull.Request.Files.Nodes'].apply(lambda r:r['path'])
    • 完整代码**
import pandas as pd

df = pd.DataFrame({'ID': [1, 2],
                   'Pull.Request.Files.Nodes': [[{'path':'example 1'}], [{'path':'example 2'}, {'path':'example 3'}]],
                   })

df = df.explode('Pull.Request.Files.Nodes', ignore_index=True)
df['Pull.Request.Files.Nodes'] = df['Pull.Request.Files.Nodes'].apply(lambda r:r['path'])

#    ID Pull.Request.Files.Nodes
# 0   1                example 1
# 1   2                example 2
# 2   2                example 3

相关问题