循环字典列表并将项目附加到数据框中的列的有效方法

lmb*_*loo 9 python pandas

这是 MRE:

data = [
    {'1':20},
    {'1':10},
    {'1':40},
    {'1':14},
    {'1':33}
]
Run Code Online (Sandbox Code Playgroud)

我想要做的是遍历每个字典并将每个值附加到数据框中的列。

现在我正在做

import pandas as pd
lst = []
for item in data:
    lst.append(item['1'])

df = pd.DataFrame({"col1":lst})
Run Code Online (Sandbox Code Playgroud)

输出:

    col1
0   20
1   10
2   40
3   14
4   33
Run Code Online (Sandbox Code Playgroud)

是的,这就是我想要的,但是我的列表中有超过 100 万本词典。这是最有效的方法吗?

编辑pd.DataFrame(data).rename(columns={'1':'col1'}) 适用于上述情况,但是如果数据看起来像这样怎么办?

data = [
    {'1':
     {'value':20}},
    {'1':
     {'value':10}},
    {'1':
      {'value':40}},
    {'1':
      {'value':14}},
    {'1':
      {'value':33}}]
Run Code Online (Sandbox Code Playgroud)

所以我会使用:

lst = []
for item in data:
    lst.append(item['1']['value'])

df = pd.DataFrame({"col1":lst})
Run Code Online (Sandbox Code Playgroud)

包含字典的字典列表有更有效的方法吗?

jez*_*ael 3

一种想法是传递dataDataFrame构造函数,然后使用rename

df = pd.DataFrame(data).rename(columns={'1':'col1'})
print (df)
   col1
0    20
1    10
2    40
3    14
4    33
Run Code Online (Sandbox Code Playgroud)

如果需要过滤,请使用列表理解并添加参数columns

df = pd.DataFrame([x['1'] for x in data], columns=['col1'])
print (df)
   col1
0    20
1    10
2    40
3    14
4    33
Run Code Online (Sandbox Code Playgroud)

编辑:对于新数据使用:

data = [
    {'1':
     {'value':20}},
    {'1':
     {'value':10}},
    {'1':
      {'value':40}},
    {'1':
      {'value':14}},
    {'1':
      {'value':33}}]

df = pd.DataFrame([x['1']['value'] for x in data], columns=['col1'])
print (df)
   col1
0    20
1    10
2    40
3    14
4    33
Run Code Online (Sandbox Code Playgroud)

或者:

df = pd.DataFrame([x['1'] for x in data]).rename(columns={'value':'col1'})
print (df)
   col1
0    20
1    10
2    40
3    14
4    33
Run Code Online (Sandbox Code Playgroud)