从 ordereddict 生成 pandas 数据框?
Generate a pandas dataframe from ordereddict?
我正在尝试从 ordereddict 创建一个 pandas 数据框以保留值的顺序。但由于某种原因,在创建数据框后,字段再次混乱。
这是 ordereddict 的列表:
[OrderedDict([
('key_a',
'value_a'),
('key_b',
'value_b'),
]),
OrderedDict([
('key_a',
'value_c'),
('key_b',
'value_d'),
])
]
现在我应该如何从这些创建一个 pandas DataFrame?我正在寻找的是类似的东西(重要的是 key_a 和 key_b 等列名顺序):
key_a key_b
0 value_a value_b
1 value_c value_d
我试过:
pd.DataFrame.from_records(orderedDictList)
pd.DataFrame.from_dict(orderedDictList)
如有任何其他问题,请随时提出。
在回答 之后,您需要明确指定您的列顺序:
df = pd.DataFrame(orderedDictList, columns=orderedDictList.keys())
当然,首先你要保证你有一个有序的字典。
您可以使用 collections
模块中的 Counter
来做类似的事情:
from collections import OrderedDict, Counter
import pandas as pd
a = {'key_a': 'value_a', 'key_b':'value_b'}
b = {'key_a': 'value_c', 'key_b':'value_d'}
ord_list = [OrderedDict(a), OrderedDict(b)]
col = Counter()
for k in ord_list:
col.update(k)
df = pd.DataFrame([k.values() for k in ord_list], columns = col.keys())
print(df)
输出:
key_b key_a
0 value_b value_a
1 value_d value_c
df = pd.DataFrame(orderedDictList, columns=orderedDictList.keys())
这不起作用,因为列表没有键值对。
您不需要指定列顺序,因为 orderedDicts 会固有地保留列顺序。以下将起作用:
df = pd.DataFrame(orderedDictList)
根据@AdeelAhmad 的回答,我需要从一个 OrderDict 中获取列:
df = pd.DataFrame(orderedDictList, columns=orderedDictList[0].keys())
希望对您有所帮助
我正在尝试从 ordereddict 创建一个 pandas 数据框以保留值的顺序。但由于某种原因,在创建数据框后,字段再次混乱。
这是 ordereddict 的列表:
[OrderedDict([
('key_a',
'value_a'),
('key_b',
'value_b'),
]),
OrderedDict([
('key_a',
'value_c'),
('key_b',
'value_d'),
])
]
现在我应该如何从这些创建一个 pandas DataFrame?我正在寻找的是类似的东西(重要的是 key_a 和 key_b 等列名顺序):
key_a key_b
0 value_a value_b
1 value_c value_d
我试过:
pd.DataFrame.from_records(orderedDictList)
pd.DataFrame.from_dict(orderedDictList)
如有任何其他问题,请随时提出。
在回答
df = pd.DataFrame(orderedDictList, columns=orderedDictList.keys())
当然,首先你要保证你有一个有序的字典。
您可以使用 collections
模块中的 Counter
来做类似的事情:
from collections import OrderedDict, Counter
import pandas as pd
a = {'key_a': 'value_a', 'key_b':'value_b'}
b = {'key_a': 'value_c', 'key_b':'value_d'}
ord_list = [OrderedDict(a), OrderedDict(b)]
col = Counter()
for k in ord_list:
col.update(k)
df = pd.DataFrame([k.values() for k in ord_list], columns = col.keys())
print(df)
输出:
key_b key_a
0 value_b value_a
1 value_d value_c
df = pd.DataFrame(orderedDictList, columns=orderedDictList.keys())
这不起作用,因为列表没有键值对。
您不需要指定列顺序,因为 orderedDicts 会固有地保留列顺序。以下将起作用:
df = pd.DataFrame(orderedDictList)
根据@AdeelAhmad 的回答,我需要从一个 OrderDict 中获取列:
df = pd.DataFrame(orderedDictList, columns=orderedDictList[0].keys())
希望对您有所帮助