Python 如何将字典作为行添加到数据帧?
我有一个带有以下列的Python 如何将字典作为行添加到数据帧?,python,pandas,dictionary,dataframe,Python,Pandas,Dictionary,Dataframe,我有一个带有以下列的DataFrame: columns = ['Autor', 'Preţul', 'Suprafaţa totală', 'Etaj', 'Etaje', 'Tipul casei', 'Tipul de camere','Numărul de camere','Starea apartamentului', 'Planificare', 'Tipul clădirii', 'Sectorul', 'Strada', 'Numărul casei'] df = pd.Dat
DataFrame
:
columns = ['Autor', 'Preţul', 'Suprafaţa totală', 'Etaj', 'Etaje', 'Tipul casei', 'Tipul de camere','Numărul de camere','Starea apartamentului', 'Planificare', 'Tipul clădirii', 'Sectorul', 'Strada', 'Numărul casei']
df = pd.DataFrame(columns=columns)
我想在这个DataFrame
中逐行添加一些字典,例如,我想为这个字典添加广告的第一行:
{'Autor': nan,
'Balcon/lojă': '2',
'Etaj': '1',
'Grup sanitar': 'separat',
'Locul de amplasare în casă': 'In mijlocul casei',
'Numărul casei': nan,
'Numărul de camere': '4 şi mai multe camere',
'Parcare': 'deschisă',
'Preţul': nan,
'Sectorul': nan,
'Strada': nan,
'Suprafaţa totală': '90 m²',
'Tipul clădirii': 'Dat în exploatare'}
不在DataFrame
列中的字典键的值应设置为NaN
值。字典中只有一部分列名作为键
例如,第二条格言:
{'Autor': nan,
'Numărul casei': nan,
'Numărul de camere': '3 camere',
'Preţul': nan,
'Sectorul': nan,
'Strada': nan,
'Suprafaţa totală': '103 m²',
'Tipul clădirii': 'Dat în exploatare'}
字典是for循环的结果,它们应作为唯一行添加。您可以循环字典,将每个字典的结果附加到列表中,然后将列表作为行添加到数据帧中
dflist = []
for dic in dictionarylist:
rlist = []
for key in keylist:
if dic[key] is None:
rlist.append(None)
else:
rlist.append(dic[key])
dflist.append(rlist)
df = pd.DataFrame(dflist)
使用dict的pandas.DataFrame.from替代构造函数。将“行”构建到列表中,首先:
In [22]: import numpy as np
In [23]: nan = np.nan
In [24]: rows = []
In [25]: rows.append({'Autor': nan,
...: 'Balcon/lojă': '2',
...: 'Etaj': '1',
...: 'Grup sanitar': 'separat',
...: 'Locul de amplasare în casă': 'In mijlocul casei',
...: 'Numărul casei': nan,
...: 'Numărul de camere': '4 şi mai multe camere',
...: 'Parcare': 'deschisă',
...: 'Preţul': nan,
...: 'Sectorul': nan,
...: 'Strada': nan,
...: 'Suprafaţa totală': '90 m²',
...: 'Tipul clădirii': 'Dat în exploatare'})
In [26]: rows.append({'Autor': nan,
...: 'Numărul casei': nan,
...: 'Numărul de camere': '3 camere',
...: 'Preţul': nan,
...: 'Sectorul': nan,
...: 'Strada': nan,
...: 'Suprafaţa totală': '103 m²',
...: 'Tipul clădirii': 'Dat în exploatare'})
然后,只需确保传递适当的“orient”参数:
In [28]: pd.DataFrame.from_dict(rows, orient='columns')
Out[28]:
Autor Balcon/lojă Etaj Grup sanitar Locul de amplasare în casă \
0 NaN 2 1 separat In mijlocul casei
1 NaN NaN NaN NaN NaN
Numărul casei Numărul de camere Parcare Preţul Sectorul Strada \
0 NaN 4 şi mai multe camere deschisă NaN NaN NaN
1 NaN 3 camere NaN NaN NaN NaN
Suprafaţa totală Tipul clădirii
0 90 m² Dat în exploatare
1 103 m² Dat în exploatare
编辑
事实上,我注意到普通构造函数工作得很好,不需要任何参数
In [31]: pd.DataFrame(rows)
Out[31]:
Autor Balcon/lojă Etaj Grup sanitar Locul de amplasare în casă \
0 NaN 2 1 separat In mijlocul casei
1 NaN NaN NaN NaN NaN
Numărul casei Numărul de camere Parcare Preţul Sectorul Strada \
0 NaN 4 şi mai multe camere deschisă NaN NaN NaN
1 NaN 3 camere NaN NaN NaN NaN
Suprafaţa totală Tipul clădirii
0 90 m² Dat în exploatare
1 103 m² Dat în exploatare
我认为没有必要进行所有的预处理。
DataFrame
construtors处理一系列的dict
s很好。我不知道pandas.DataFrame。从dict
,这很酷。这就是该函数有效地实现的功能,尽管据推测,DataFrame.from_dict
可以更有效地实现它。正如我刚刚发现的,普通的pd.DataFrame
构造函数也可以很好地工作。它并没有像我需要的那样工作,例如每个dict都是4个dict的组合:z={**adresa,**d,**pret,**autor}
当我将nwz
添加到现有列表行中时,它会重写最后一个dict。列的数量及其名称应该一直保持不变,但它们在变化。@Sinchetru我不知道在列表中添加新的z
将如何重写最后一个dict
。这绝对不应该发生。你到底在干什么?我发现了错误。我在循环中编写了行=[]
,因此每次它都创建了一个新列表。你的答案是正确的。我将表达式更改为df=pd.DataFrame(rows,columns=columns)
,列名称和编号就是我需要的。