【问题标题】:How to map dictionary keys to list of column names in Python Pandas DataFrame?如何将字典键映射到 Python Pandas DataFrame 中的列名列表?
【发布时间】:2020-08-21 09:49:43
【问题描述】:

我是 Pandas Dataframe 的新手。

我需要将传入的JSON 持久化到MySQL 数据库中。

数据库中的列:

    column1 -- maps to key1
    column2 -- maps to key2
    column3 -- maps to key3

传入JSONpayload

    {
       "key1" : "value11",
       "key2" : "value12",
       "key3" : "value13",
    },
     
     {
       "key1" : "value21",
       "key2" : "value22",
       "key3" : "value23",
    }

JSON 在 python 中转换为dictionary。所以,如果我这样做:

from panadas import DataFrame

df = DataFrame(data=list(payload))
print(df)

输出:

键1 键2 键3
价值11 价值12 价值13
价值21 价值22 价值23

但是,我想要一个输出为(插入数据库):

列 1 列 2 列 3
价值11 价值12 价值13
价值21 价值22 价值23

我知道这可以使用:

# values = list of values from each dictionary in payload
# col_name_list = ['Column1', 'Column3', 'Column3']
df = DataFrame(data=values, columns=col_name_list)

但是,我如何确保映射,即Column1 -> Key1 成立。使用该方法,如果有效载荷中键的顺序发生变化,可能会出现我最终将key1 的值插入column2 的情况。

那么,我可以将某种 map 的 dict 键传递给 DataFrame 在为列选择值之前可以引用的列名吗?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您实际上可以将您的 JSON 输入转换为一个 pandas 数据框,就好像它是一个字典列表,然后创建一个自定义映射来简单地重命名列名。

    my_map = {"key1": "column1", "key2": "column2", "key3": "column3"}
    
    
    data = [{
           "key1" : "value11",
           "key2" : "value12",
           "key3" : "value13",
        },
         
         {
           "key1" : "value21",
           "key2" : "value22",
           "key3" : "value23",
        }]
            
    
    df = pd.DataFrame(data).rename(columns=my_map)
    print(df)
    

    输出:

       column1  column2  column3
    0  value11  value12  value13
    1  value21  value22  value23
    

    编辑以表明如果键的顺序发生变化,它可以工作

    my_map = {"key1": "column1", "key2": "column2", "key3": "column3"}
    
    
    data = [{
           "key2" : "value12",
           "key1" : "value11",
           "key3" : "value13",
        },
    
         {
           "key3" : "value23",
           "key2" : "value22",
           "key1" : "value21",
        }]
    
    
    df = pd.DataFrame(data).rename(columns=my_map)
    print(df)
    

    输出:

       column1  column2  column3
    0  value11  value12  value13
    1  value21  value22  value23
    

    【讨论】:

      猜你喜欢
      • 2016-09-02
      • 2021-08-04
      • 2019-01-05
      • 2021-07-22
      • 2021-08-31
      • 1970-01-01
      • 2023-02-21
      • 1970-01-01
      • 2017-06-28
      相关资源
      最近更新 更多