如何从多个字典创建数据框
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 column
s,所以我们可以找到一个想法......
我们知道 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)
,括号没用,items
为 dictionary
添加一个以上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
可以让你把 dataframe
或 series
作为 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
...:))
我的数据(多个词典)在处理和从中创建 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 column
s,所以我们可以找到一个想法......
我们知道 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)
,括号没用,items
为 dictionary
添加一个以上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
可以让你把 dataframe
或 series
作为 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
...:))