簡體   English   中英

使用 json 數據旋轉 pandas dataframe

[英]Pivoting a pandas dataframe with json data

我有一個 pandas dataframe,有些行包含 json 數據

日期 信息
2020-01-01 { 'var1': 'foo'}
2020-01-01 內容不同
2020-01-01 { 'var2': 'foo'}
2020-01-02 非 json 內容
2020-01-02 { 'var2': '酒吧'}

我想要 pivot 表,這樣我就有了不同變量的時間序列,比如

日期 變種1 變量2
2020-01-01
2020-01-02 南/空 酒吧

使用將 json 轉換為字典將值轉換為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

不確定您的數據到底是什么樣子,但您可以執行以下操作

  • 使用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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM