首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阅读熊猫资料中的非结构化词典

阅读熊猫资料中的非结构化词典
EN

Stack Overflow用户
提问于 2020-01-29 19:24:24
回答 3查看 229关注 0票数 2

我正试图从我从json文件中读到的一组字典中创建一个熊猫数据。字典如下-

代码语言:javascript
复制
d1 = {"DisplayName": "Test_drive", "permissions": {"read": True, "read_acp": True, "write": True, "write_acp": True}}
d2= {"DisplayName": "Log delivery","URI": "http://test_drive.com/Logs", "permissions": {"read": False, "read_acp": True, "write": True, "write_acp": False}}

我正试着把这些放进一只熊猫的资料里。当我试着用数据格式读它们的时候-

代码语言:javascript
复制
df = pd.DataFrame(d) **or** df = pd.DataFrame.from_dict(d)

它产生这个-

代码语言:javascript
复制
                DisplayName  permissions
read       Test_drive         True
read_acp   Test_drive         True
write      Test_drive         True
write_acp  Test_drive         True

或者把它读成-

代码语言:javascript
复制
df1 = pd.DataFrame(d).Transpose()

它产生这个-

代码语言:javascript
复制
                         read          read_acp             write         write_acp
DisplayName  Test_drive  Test_drive  Test_drive  Test_drive
permissions              True              True              True              True

我正试着读这些字典,并把它们合并成一个数据集-

代码语言:javascript
复制
**DisplayName**              **read**          **read_acp**             **write**         **write_acp**         URI
Test_drive         True              True              True              True         NA
Log delivery            False             True              True             False         http://test_drive.com/Logs

有什么办法可以做到吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-31 16:00:08

谢谢VishnudevMax Power的帮助。我想下面的答案给了我我想要得到的确切数据。

代码语言:javascript
复制
d1 = {"DisplayName": "Test_drive", "permissions": {"read": True, "read_acp": True, "write": True, "write_acp": True}}
d2= {"DisplayName": "Log delivery","URI": "http://test_drive.com/Logs", "permissions": {"read": False, "read_acp": True, "write": True, "write_acp": False}}
df = pd.concat([pd.Series(d1),pd.Series(d2)], axis=1).transpose()
df = pd.concat([df.drop(['permissions'], axis=1),df['permissions'].apply(pd.Series)],axis=1)

**DisplayName                         URI   read  read_acp  write  write_acp**
0    Test_drive                         NaN   True      True   True       True
1  Log delivery  http://test_drive.com/Logs  False      True   True      False
票数 0
EN

Stack Overflow用户

发布于 2020-01-29 19:43:33

通过附加数据帧创建数据帧,然后使用透视对所需的结构进行整形。

代码语言:javascript
复制
df = pd.DataFrame.from_dict(d1).append(pd.DataFrame.from_dict(d2))
df.reset_index().pivot(index='DisplayName', columns='index', values='permissions')

包含URI

代码语言:javascript
复制
>>> df.reset_index().pivot(index='DisplayName', columns='index', values=['permissions', 'URI'])
             permissions                                                  URI                                                                                    
index               read read_acp write write_acp                        read                    read_acp                       write                   write_acp
DisplayName                                                                                                                                                      
Log delivery       False     True  True     False  http://test_drive.com/Logs  http://test_drive.com/Logs  http://test_drive.com/Logs  http://test_drive.com/Logs
Test_drive          True     True  True      True                         NaN                         NaN                         NaN                         NaN
票数 2
EN

Stack Overflow用户

发布于 2020-01-29 19:41:14

代码语言:javascript
复制
import pandas as pd

# Input Data
d1 = {"DisplayName": "Test_drive", "permissions": {"read": True, "read_acp": True, "write": True, "write_acp": True}}
d2= {"DisplayName": "Log delivery","URI": "http://test_drive.com/Logs", "permissions": {"read": False, "read_acp": True, "write": True, "write_acp": False}}

# Convert to DataFrame
dicts = [d1, d2]
df_rows = [pd.DataFrame(d) for d in dicts]
df = pd.concat(df_rows, axis=0).reset_index(drop=False)

# Reshape As Desired
tp1 = df.pivot(index='DisplayName', columns='index', values='permissions')
answer = tp1.merge(df[['DisplayName', 'URI']].drop_duplicates(), 
                   how='left', 
                   left_index=True, 
                   right_on='DisplayName').set_index('DisplayName')

输出:

代码语言:javascript
复制
>>> answer
               read  read_acp  write  write_acp                         URI
DisplayName                                                                
Log delivery  False      True   True      False  http://test_drive.com/Logs
Test_drive     True      True   True       True                         NaN
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59974209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档