pandas 用json数据旋转panda Dataframe

jpfvwuh4  于 2023-01-04  发布在  其他
关注(0)|答案(2)|浏览(135)

我有一个panda Dataframe ,其中一些行包含json数据
| 日期|讯息|
| - ------| - ------|
| 2020年1月1日|{"变量1 ":" foo'}|
| 2020年1月1日|不同含量|
| 2020年1月1日|{' var2':'foo'}|
| 2020年1月2日|非json内容|
| 2020年1月2日|{"变量2 ":"条形图"}|
我想透视表,这样我就有了不同变量的时间序列,例如
| 日期|变量1|变量2|
| - ------| - ------| - ------|
| 2020年1月1日|富|富|
| 2020年1月2日|无/空|棒|

dsekswqp

dsekswqp1#

使用convert jsons to dict将值转换为Series,最后通过GroupBy.first获取每个日期时间的第一个非缺失值:

import ast

def f(x):
    try:
        return pd.Series(ast.literal_eval(x))
    except SyntaxError:
        return pd.Series()

df = df.set_index('Date')['message'].apply(f).groupby(level=0).first()
print (df)
            var1 var2
Date                 
2020-01-01   foo  foo
2020-01-02  None  bar
azpvetkf

azpvetkf2#

不确定数据的确切外观,但可以执行以下操作

  • 使用pd.json_normalize()解析一些嵌套的json内容
  • 然后使用groupby()来获得例如第一个结果

下面是一个例子:

import pandas as pd

#Input data
data = {
        "Date": ["2020-01-01","2020-01-01","2020-01-01","2020-01-02","2020-01-02"],
        "message": [{'var1': 'foo'}, {'stupidkey':'stupidval'}, {'var2':'foo'}, "bla", {'var2':'bar'}]
        }
df = pd.DataFrame(data)

# Generate result
varsToKeep = ["var1", "var2"]
df_vars = pd.json_normalize(df["message"])[varsToKeep]
df = df.join(df_vars)
df_result = df.groupby("Date").first()[varsToKeep]

相关问题