[英]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.