![](/img/trans.png)
[英]How to create nested array of array inside a pandas dataframe column
[英]How to Create a DataFrame with Nested Array
实际上我收到一个 Pandas 生成的 JSON,我加载它来创建一个 Dataframe。它的 Dataframe 有一些我需要迭代的嵌套数组列;
只需加载一个pandas.read_json()
得到一个包含 arrays 的列,我无法在该列下工作。 波纹管代码:
import pandas
dataframe = pandas.read_json('/Users/***/Downloads/df_teste.json', orient='table')
print(dataframe)
像上面这样返回一个 Dataframe:
学生卡 | 姓名 | 创建时间 | 语言 |
---|---|---|---|
1个 | 福 | 2019-01-03 14:30:32.146000+00:00 | [{'language_id': 1, 'name': 'English', 'optin_... |
2个 | 酒吧 | 2019-01-03 14:30:32.146000+00:00 | [{'language_id': 1, 'name': 'English', 'optin_... |
我的问题是:我怎样才能像这样阅读?
学生卡 | language_id | 语言名称 | optin_at |
---|---|---|---|
1个 | 1个 | 英语 | 2019-01-03T14:30:32.148Z |
2个 | 1个 | 英语 | 2021-05-30T00:33:02.915Z |
2个 | 2个 | 葡萄牙语 | 2022-03-07T07:42:07.082Z |
出于测试目的,我正在使用以下 JSON 加载:
{
"schema": {
"fields": [
{ "name": "student_id", "type": "string" },
{ "name": "name", "type": "string" },
{ "name": "created_at", "type": "datetime", "tz": "UTC" },
{ "name": "languages", "type": "string" }
],
"pandas_version": "0.20.0"
},
"data": [
{
"student_id": "1",
"name": "Foo",
"created_at": "2019-01-03T14:30:32.146Z",
"languages": [
{
"language_id": 1,
"name": "English",
"optin_at": "2019-01-03T14:30:32.148Z"
}
]
},
{
"student_id": "2",
"name": "Bar",
"created_at": "2019-01-03T14:30:32.146Z",
"languages": [
{
"language_id": 1,
"name": "English",
"optin_at": "2021-05-30T00:33:02.915Z"
},
{
"language_id": 2,
"name": "Portuguese",
"optin_at": "2022-03-07T07:42:07.082Z"
}
]
}
]
}
您可以使用 json_normalize 生成预期的 output,这里我使用 json_normalize 从您的输入 json 创建了预期的 output。
import pandas as pd
from pandas import json_normalize
data = {
"schema": {
"fields": [
{ "name": "student_id", "type": "string" },
{ "name": "name", "type": "string" },
{ "name": "created_at", "type": "datetime", "tz": "UTC" },
{ "name": "languages", "type": "string" }
],
"pandas_version": "0.20.0"
},
"data": [
{
"student_id": "1",
"name": "Foo",
"created_at": "2019-01-03T14:30:32.146Z",
"languages": [
{
"language_id": 1,
"name": "English",
"optin_at": "2019-01-03T14:30:32.148Z"
}
]
},
{
"student_id": "2",
"name": "Bar",
"created_at": "2019-01-03T14:30:32.146Z",
"languages": [
{
"language_id": 1,
"name": "English",
"optin_at": "2021-05-30T00:33:02.915Z"
},
{
"language_id": 2,
"name": "Portuguese",
"optin_at": "2022-03-07T07:42:07.082Z"
}
]
}
]
}
student_detail = ['student_id']
df = pd.json_normalize(data['data'], 'languages', student_detail)
print(df)
通过打印 df 你可以得到你想要的 output 。 这是 output。请注意,这些列是无序的,您可以订购。 谢谢
language_id name optin_at student_id
0 1 English 2019-01-03T14:30:32.148Z 1
1 1 English 2021-05-30T00:33:02.915Z 2
2 2 Portuguese 2022-03-07T07:42:07.082Z 2
希望对您有所帮助,如果没有,请告知。 谢谢,
PS:我不确定这是否是您所期待的。 您可以简单地在 optin_at 列上使用 pd.to_datetime。 我在下面提供了代码,
df['optin_at'] = pd.to_datetime(df['optin_at'])
print(df['optin_at'])
如果添加这两行,它会以日期时间格式打印 optin_at。 Output
0 2019-01-03 14:30:32.148000+00:00
1 2021-05-30 00:33:02.915000+00:00
2 2022-03-07 07:42:07.082000+00:00
希望这会有所帮助,如果不是这种情况请告知。 谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.