将 python 数据帧转换为字典,然后转换为字符串
Converting python dataframe into dictionary and then into a string
我有一个名为 users_df
的数据框,看起来像这样
id
first_name
last_name
signup_date
1
詹姆斯
史密斯
2021-01-01
2
马克
亚当斯
2021-03-02
3
玛丽
玫瑰
2021-05-03
users_df = pd.DataFrame([[1, 'James', 'Smith', '2021-01-01'], [2, 'Mark', 'Adams', '2021-03-02'],[3, 'Mary', 'Rose', '2021-05-03']], columns=['id', 'first_name','last_name', 'signup_date'])
我首先尝试将其转换成如下所示的字典:
user_dict = {
"users": [
{"id": 1, "user_fields": {"first_name": "James", "last_name": "Smith", "signup_date": "2021-01-01"}},
{"id": 2, "user_fields": {"first_name": "Mark", "last_name": "Adams", "signup_date": "2021-03-02"}},
{"id": 3, "user_fields": {"first_name": "Mary", "last_name": "Rose", "signup_date": "2021-05-03"}}
]
}
然后最后将其转换为字符串:
user_dict_string = '{"users": [{"id": 1, "user_fields": {"first_name": "James", "last_name": "Smith", "signup_date": "2021-01-01"}}, {"id": 2, "user_fields": {"first_name": "Mark", "last_name": "Adams", "signup_date": "2021-03-02"}}, {"id": 3, "user_fields": {"first_name": "Mary", "last_name": "Rose", "signup_date": "2021-05-03"}}]}'
我卡住的部分是将数据帧转换为字典,同时保留“id”部分(当我这样做时请参见下面的示例to_dict('index')
),然后添加 "users"
列表和嵌套的 "user_fields"
部分。
我能找到的就是使用这个:
user_dict = user_list.to_dict('index')
但结果看起来像这样,这不是我想要的
{1: {'first_name': 'James', 'last_name': 'Smith', 'signup_date': '2021-01-01'}, 2: {'first_name': 'Mark', 'last_name': 'Adams', 'signup_date': '2021-03-02'}, 3: {'first_name': 'Mary', 'last_name': 'Rose', 'signup_date': '2021-05-03'}}
感谢任何帮助
我们可以使用字典理解来创建所需格式的记录
{'users': [{'id': d.pop('id'), 'user_fields': d} for d in users_df.to_dict('r')]}
{'users': [{'id': 1,
'user_fields': {'first_name': 'James',
'last_name': 'Smith',
'signup_date': '2021-01-01'}},
{'id': 2,
'user_fields': {'first_name': 'Mark',
'last_name': 'Adams',
'signup_date': '2021-03-02'}},
{'id': 3,
'user_fields': {'first_name': 'Mary',
'last_name': 'Rose',
'signup_date': '2021-05-03'}}]}
您可以使用理解从
构建预期的结构
users_df = pd.DataFrame([[1, 'James', 'Smith', '2021-01-01'],
[2, 'Mark', 'Adams', '2021-03-02'],
[3, 'Mary', 'Rose', '2021-05-03']],
columns=['id', 'first_name','last_name', 'signup_date'])
您已经发现:
users_df.set_index('id').to_dict('index')
给出:
{1: {'first_name': 'James', 'last_name': 'Smith', 'signup_date': '2021-01-01'},
2: {'first_name': 'Mark', 'last_name': 'Adams', 'signup_date': '2021-03-02'},
3: {'first_name': 'Mary', 'last_name': 'Rose', 'signup_date': '2021-05-03'}}
只需添加一步:
user_dict = {'users': [{'id': k, 'user_fields': v}
for k, v in users_df.set_index('id').to_dict('index')
.items()]}
获得:
{'users': [{'id': 1,
'user_fields': {'first_name': 'James',
'last_name': 'Smith',
'signup_date': '2021-01-01'}},
{'id': 2,
'user_fields': {'first_name': 'Mark',
'last_name': 'Adams',
'signup_date': '2021-03-02'}},
{'id': 3,
'user_fields': {'first_name': 'Mary',
'last_name': 'Rose',
'signup_date': '2021-05-03'}}]}
一个简单的 json.dumps
会将其转换为字符串...
我有一个名为 users_df
的数据框,看起来像这样
id | first_name | last_name | signup_date |
---|---|---|---|
1 | 詹姆斯 | 史密斯 | 2021-01-01 |
2 | 马克 | 亚当斯 | 2021-03-02 |
3 | 玛丽 | 玫瑰 | 2021-05-03 |
users_df = pd.DataFrame([[1, 'James', 'Smith', '2021-01-01'], [2, 'Mark', 'Adams', '2021-03-02'],[3, 'Mary', 'Rose', '2021-05-03']], columns=['id', 'first_name','last_name', 'signup_date'])
我首先尝试将其转换成如下所示的字典:
user_dict = {
"users": [
{"id": 1, "user_fields": {"first_name": "James", "last_name": "Smith", "signup_date": "2021-01-01"}},
{"id": 2, "user_fields": {"first_name": "Mark", "last_name": "Adams", "signup_date": "2021-03-02"}},
{"id": 3, "user_fields": {"first_name": "Mary", "last_name": "Rose", "signup_date": "2021-05-03"}}
]
}
然后最后将其转换为字符串:
user_dict_string = '{"users": [{"id": 1, "user_fields": {"first_name": "James", "last_name": "Smith", "signup_date": "2021-01-01"}}, {"id": 2, "user_fields": {"first_name": "Mark", "last_name": "Adams", "signup_date": "2021-03-02"}}, {"id": 3, "user_fields": {"first_name": "Mary", "last_name": "Rose", "signup_date": "2021-05-03"}}]}'
我卡住的部分是将数据帧转换为字典,同时保留“id”部分(当我这样做时请参见下面的示例to_dict('index')
),然后添加 "users"
列表和嵌套的 "user_fields"
部分。
我能找到的就是使用这个:
user_dict = user_list.to_dict('index')
但结果看起来像这样,这不是我想要的
{1: {'first_name': 'James', 'last_name': 'Smith', 'signup_date': '2021-01-01'}, 2: {'first_name': 'Mark', 'last_name': 'Adams', 'signup_date': '2021-03-02'}, 3: {'first_name': 'Mary', 'last_name': 'Rose', 'signup_date': '2021-05-03'}}
感谢任何帮助
我们可以使用字典理解来创建所需格式的记录
{'users': [{'id': d.pop('id'), 'user_fields': d} for d in users_df.to_dict('r')]}
{'users': [{'id': 1,
'user_fields': {'first_name': 'James',
'last_name': 'Smith',
'signup_date': '2021-01-01'}},
{'id': 2,
'user_fields': {'first_name': 'Mark',
'last_name': 'Adams',
'signup_date': '2021-03-02'}},
{'id': 3,
'user_fields': {'first_name': 'Mary',
'last_name': 'Rose',
'signup_date': '2021-05-03'}}]}
您可以使用理解从
构建预期的结构users_df = pd.DataFrame([[1, 'James', 'Smith', '2021-01-01'],
[2, 'Mark', 'Adams', '2021-03-02'],
[3, 'Mary', 'Rose', '2021-05-03']],
columns=['id', 'first_name','last_name', 'signup_date'])
您已经发现:
users_df.set_index('id').to_dict('index')
给出:
{1: {'first_name': 'James', 'last_name': 'Smith', 'signup_date': '2021-01-01'},
2: {'first_name': 'Mark', 'last_name': 'Adams', 'signup_date': '2021-03-02'},
3: {'first_name': 'Mary', 'last_name': 'Rose', 'signup_date': '2021-05-03'}}
只需添加一步:
user_dict = {'users': [{'id': k, 'user_fields': v}
for k, v in users_df.set_index('id').to_dict('index')
.items()]}
获得:
{'users': [{'id': 1,
'user_fields': {'first_name': 'James',
'last_name': 'Smith',
'signup_date': '2021-01-01'}},
{'id': 2,
'user_fields': {'first_name': 'Mark',
'last_name': 'Adams',
'signup_date': '2021-03-02'}},
{'id': 3,
'user_fields': {'first_name': 'Mary',
'last_name': 'Rose',
'signup_date': '2021-05-03'}}]}
一个简单的 json.dumps
会将其转换为字符串...