繁体   English   中英

如何将 pandas dataframe 行转换为自己的数据帧?

[英]How to convert pandas dataframe rows into their own dataframes?

我有一组数据,例如:

     values                site_name    timezone    variable_name                                                      
0    [{'value':            SAN JOAQUIN  PST         degC
     [{'value': '9.3', 
     'qualifiers': ['P'], 
     'date': '2022-01-05'
     },
     {'value': '9.4', 
     'qualifiers': ['P'], 
     'date': '2022-01-05'
     }]
     }]
1    [{'value':            SAN JOAQUIN  PST         pH
     [{'value': '7.5', 
     'qualifiers': ['P'], 
     'date': '2022-01-05'
     },
     {'value': '7.8', 
     'qualifiers': ['P'], 
     'date': '2022-01-05'
     }]
     }]

其中的值是一个长列表,每一行都有这些嵌套的值集。 我如何使用 pandas 将每个 variable_name 转换为它们自己的 dataframe?

我想要类似的东西:

degC table
     value   date        qualifier
0    9.3     2022-01-05  P
1    9.4     2022-01-05  P 

pH table
     value   date        qualifier
0    7.5     2022-01-05  P
1    7.8     2022-01-05  P

到目前为止,这是我尝试过的:

df = pd.json_normalize(file)
for i in range(len(df.index)):
  pd.json_normalize(df.iloc[i])

上面显示的原始输入:

df = pd.DataFrame({'values':[[{'value': [{'value': '9.3', 'qualifiers': ['P'], 'date': '2022-01-05'},
                                         {'value': '9.4', 'qualifiers': ['P'], 'date': '2022-01-05'}]
                              }], 
                             [{'value': [{'value': '7.5', 'qualifiers': ['P'], 'date': '2022-01-05'},
                                         {'value': '7.8', 'qualifiers': ['P'], 'date': '2022-01-05'}]
                              }]],
                   'variable_name':['degC','pH']})

您所需的数据作为value键的值存在于'values'列的每一行中。 您可以使用str.get方法来访问这些字典列表。

然后使用iterrows方法,遍历df的行并将这些列表转换为pd.DataFrame (也使用explode方法从列表中取出qualifiers值)并收集字典中的所有数据。

df['values'] = df['values'].str[0].str.get('value')

out = {}
for _, d in df.iterrows():
    out[d['variable_name']] = pd.DataFrame(d['values']).explode('qualifiers')

然后例如, print(out['degC'])吐出

  value qualifiers        date
0   9.3          P  2022-01-05
1   9.4          P  2022-01-05

print(out['pH'])

  value qualifiers        date
0   7.5          P  2022-01-05
1   7.8          P  2022-01-05

带数据框:

>>> df
                                                 values variable_name
0  [{'value': [{'value': '9.3', 'qualifiers': ['P'] ...          degC
1  [{'value': [{'value': '7.5', 'qualifiers': ['P'] ...            pH

使用这个:

new_df = df['values'].apply(lambda x: pd.DataFrame(x[0]['value']))
new_df.index = df['variable_name']

>>> new_df.loc['degC']
  value qualifiers        date
0   9.3        [P]  2022-01-05
1   9.4        [P]  2022-01-05

>>> new_df.loc['pH']
  value qualifiers        date
0   7.5        [P]  2022-01-05
1   7.8        [P]  2022-01-05

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM