如何从多个字典创建数据框

How to create a Dataframe from multiple dictionaries

我的数据(多个词典)在处理和从中创建 Dataframe 时遇到一点问题。

这是数据的样子:

print(data)
0         {'john': True}
1         {'joe': True}
2         {'tom': True}
3         {'mark': False}
4         {'andrew': True}
                       ...                  
93        {'david': False}
94        {'luke': False}
95        {'vincent': True}
96        {'oliver': True}
97        {'matthew': True}
Length: 98, dtype: object

基本上我想要的是这个:

df = pd.DataFrame()
df['name'] = data[0].keys()
df['result'] = data[0].values()
print(df)

    name    result
0   john    True

所以 1 个数据框有 2 列 - 名称和结果。

如何对 data 中的所有词典应用该过程并在同一个 Dataframe 中有 1 个输出? 我无法通过 lambda 函数复制该操作,但也许我没有做对。

pd.DataFrame(data.apply(lambda x: list(x.items())[0]).values.tolist())

您可以重命名列,使用:

df.rename(columns={0: 'name', 1: 'result'}, inplace=True)

你想要什么?一个 dataframe 和 2 columns,所以我们可以找到一个想法...... 我们知道 pd.DataFrame 是一个构造函数,它获取 data 并将其转换为 dataframe 如果 data 是二维形式,如二维列表或二维 numpy数组或其他东西 将被转换为具有 2 列的 dataframe

好的,现在,我们有了想法……所以,让我们开始吧……并将数据转换为二维形式

嗯..哦...data series中的每个单元格都是dictionary并且python提供了一个内置方法将其转换为二维形式:items

data.apply(lambda x: x.items())

输出:

0       ((john, True))
1        ((joe, True))
2        ((tom, True))
3      ((mark, False))
...

哇,很好...但是,等等...我们只需要 (john, True),括号没用,itemsdictionary 添加一个以上key-value 喜欢:{'john': True, 'jane': False, 'joe': True}...

但是,我们只有一个,必须删除它...我的意思是 select 第一个元素:((john, True))... 不幸的是...项目输出不允许我们 select 第一个元素,因此,我们将其转换为 list 然后 select 第一个元素:

data.apply(lambda x: list(x.items())[0])

输出:

0       (john, True)
1        (joe, True)
2        (tom, True)

哦..每个单元格都是1d,总共是2d(系列本身就是一个维度)

如果你给 pd.DataFrame 一个系列,什么都没有改变......它再次给你......所以,你必须把它改成 list...

pandas 有一个内置的 属性: values 可以让你把 dataframeseries 作为 numpy array 而你可以把它给别人,然后 he\she 再从中赚取 dataframe...

你注意到了吗? 所以,你必须把它转换成2d list。这个 array, 本身是二维的,所以只需将它转换为 list: .tolist():

data.apply(lambda x: list(x.items())[0]).values.tolist()

输出:

[('john', True),
 ('joe', True),
 ('tom', True),
 ('mark', False),
 ('andrew', True),
...]

哦...一个漂亮、干净的二维列表...传给pd.DataFrame...:))