【问题标题】:json to pandas dataframe with first column value to be same across all rowsjson到pandas数据框,第一列值在所有行中都相同
【发布时间】:2020-09-09 15:58:24
【问题描述】:

我想要两列 empname 和 empjosn,empjson 包含 json 格式的员工历史记录。我想将此 empjson 列转换为普通数据,并将所有详细信息与 empname 列一起放在单独的列中。

当我尝试这段代码时,我只得到一行的输出,我希望这适用于所有值。

df[['alias','deptid','empid','mgnme','salary']] = pd.DataFrame.from_records(df['empjson'][0])

数据帧:

| empname | empjson |
| David   | [{'alias': 'xxxxx', 'deptid':   'P1021', 'empid': 10749, 'mgnme': 'hhhhh', 'salary': 20123}, {'alias':   'xxxxx', 'deptid': 'P1021', 'empid': 10749, 'mgnme': 'hhhhh', 'salary':   20123}, {'alias': 'xxxxx', 'deptid': 'P1021', 'empid': 10749, 'mgnme':   'hhhhh', 'salary': 20123}, {'alias': 'xxxxx', 'deptid': 'P1021', 'empid':   10749, 'mgnme': 'hhhhh', 'salary': 20123}, {'alias': 'xxxxx', 'deptid':   'P1021', 'empid': 10749, 'mgnme': 'hhhhh', 'salary': 20123}, {'alias':   'xxxxx', 'deptid': 'P1021', 'empid': 10749, 'mgnme': 'hhhhh', 'salary':   20123}, {'alias': 'xxxxx', 'deptid': 'P1021', 'empid': 10749, 'mgnme':   'hhhhh', 'salary': 20123}, {'alias': 'xxxxx', 'deptid': 'P1021', 'empid':   10749, 'mgnme': 'hhhhh', 'salary': 20123}, {'alias': 'xxxxx', 'deptid':   'P1021', 'empid': 10749, 'mgnme': 'hhhhh', 'salary': 20123}, {'alias':   'xxxxx', 'deptid': 'P1021', 'empid': 10749, 'mgnme': 'hhhhh', 'salary':   20123}, {'alias': 'xxxxx', 'deptid': 'P1021', 'empid': 10749, 'mgnme':   'hhhhh', 'salary': 20123}, {'alias': 'xxxxx', 'deptid': 'P1021', 'empid':   10749, 'mgnme': 'hhhhh', 'salary': 20123}, {'alias': 'xxxxx', 'deptid':   'P1021', 'empid': 10749, 'mgnme': 'hhhhh', 'salary': 20123}, {'alias':   'xxxxx', 'deptid': 'P1021', 'empid': 10749, 'mgnme': 'hhhhh', 'salary':   20123}, {'alias': 'xxxxx', 'deptid': 'P1021', 'empid': 10749, 'mgnme':   'hhhhh', 'salary': 20123}, {'alias': 'xxxxx', 'deptid': 'P1021', 'empid':   10749, 'mgnme': 'hhhhh', 'salary': 20123}, {'alias': 'xxxxx', 'deptid':   'P1021', 'empid': 1829, 'mgnme': 'hhhhh', 'salary': 1061}] |

所需输出:

| empname | alias | deptid | empid | mgnme | salary |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |
| David   | xxxxx | P1021  | 10749 | yyyyy | 20123  |

【问题讨论】:

    标签: python json python-3.x dataframe


    【解决方案1】:
    import pandas as pd
    
    df = pd.read_csv(r'read_file.csv')
    
    js =df.iloc[0,1].replace("[{","").replace("}]","").split("}, {")
    
    lst = []
    for i in range(len(js)):
        lt = []
        dict = eval("{" + js[i] + "}")
        lt.append(df.iloc[0,0])
        lt.append(dict['alias'])
        lt.append(dict['deptid'])
        lt.append(dict['empid'])
        lt.append(dict['mgnme'])
        lt.append(dict['salary'])
        lst.append(lt)
        
    final = pd.DataFrame(lst)
    final.columns = ['name','alias', 'deptid', 'empid', 'mgnme', 'salary']
    

    【讨论】:

      猜你喜欢
      • 2013-07-24
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2020-04-06
      相关资源
      最近更新 更多