使用ID/key/valu将dict转换为三列数据帧

2024-09-27 07:19:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我确信这已经在某个地方得到了回答,但是查询它有点棘手。你知道吗

我有一个dict,它由一个ID字段和1对多个键值组成 例如:

{ '123' : {'name': 'Joe', 'age': '17 },
  '888' : {'name': 'Cheryl', 'hometown': 'Liverpool'},
  '432' : {'name': 'Raj'}
 }

我想将其放入一个SQL表中,该表由三列组成:id | property name | property value,例如:

123 | name | Joe
123 | age  | 17
888 | name | Cheryl
888 | hometown | Liverpool
432 | name | Raj

我的计划是通过一个pandas数据帧,然后对它执行sql操作。问题是用dict创建一个dataframe试图使IDs列标题和每个可能的属性名成为一行。你知道吗

问题1:将dict转换为3列数据帧并在其中循环的唯一方法是将值附加到三个数组中吗?你知道吗

问题二:到底有必要通过熊猫吗?使用sqlalchemy并填充INSERT查询会更好吗?你知道吗


Tags: 数据nameidagesql地方propertydict
2条回答

您可以使用Series

pd.Series(d).apply(pd.Series).stack().reset_index()
Out[206]: 
  level_0   level_1          0
0     123       age         17
1     123      name        Joe
2     432      name        Raj
3     888  hometown  Liverpool
4     888      name     Cheryl

另一种使用from_dict的方法

d = { '123' : {'name': 'Joe', 'age': '17'},
   '888' : {'name': 'Cheryl', 'hometown': 'Liverpool'},
   '432' : {'name': 'Raj'}
  }    
df = pd.DataFrame.from_dict(d, orient = 'index').unstack().reset_index()
df
        level_0 level_1          0
    0      name     123        Joe
    1      name     432        Raj
    2      name     888     Cheryl
    3       age     123         17
    4       age     432        NaN
    5       age     888        NaN
    6  hometown     123        NaN
    7  hometown     432        NaN
    8  hometown     888  Liverpool

如果要删除NaN,只需在语句末尾添加.dropna()。你知道吗

df = pd.DataFrame.from_dict(d, orient = 'index').unstack().reset_index().dropna()
df
        level_0 level_1          0
    0      name     123        Joe
    1      name     432        Raj
    2      name     888     Cheryl
    3       age     123         17
    8  hometown     888  Liverpool

相关问题 更多 >

    热门问题