#python #list #dataframe
#python #Список #dataframe
Вопрос:
{
"reviews": [
{
"reviewId": "12a3",
"authorName": "Muhammad Arifin",
"comments": [
{
"userComment": {
"text": "tsangat terbantu👍",
"lastModified": {
"seconds": "1606819245",
"nanos": 835000000
},
"starRating": 5,
"reviewerLanguage": "id",
"device": "1601",
"androidOsVersion": 23,
"appVersionCode": 20365,
"appVersionName": "5.2.73",
"deviceMetadata": {
"productName": "1601 (1601)",
"manufacturer": "Vivo",
"deviceClass": "FORM_FACTOR_PHONE",
"nativePlatform": "ABI_ARM64_V8,ABI_ARM_V7,ABI_ARM",
"cpuModel": "MT6750",
"cpuMake": "Mediatek"
}
}
},
{
"developerComment": {
"text": "Terima kasih sudah berbagi, kami sangat senang menjadi bagian dalam pejalanan travel anda!",
"lastModified": {
"seconds": "1606818598",
"nanos": 722000000
}
}
}
]
}
]
"tokenPagination": {
"nextPageToken": "abc"
}
}
Я хочу, чтобы имя столбца было таким, как
reviewId, AuthorName, userComment_text, userComment_lastModified, StarRating , deviceMetadata.manufacturer, developerComment.text
Я пробовал это:
df=pd.json_normalize(fetch_reviews_response, record_path="reviews")
но он создает только столбец reviewId, AuthorName и comments
Ответ №1:
Пожалуйста, попробуйте это репозиторий и посмотрите, сработает ли это.
Для достижения этой цели используются рекурсивные функции. Функция в ‘json_to_csv.py ‘может быть легко перенесен для вашего использования путем преобразования плоского результата json в фрейм данных, просто загрузив его с помощью ‘pandas.read_json’.
Ответ №2:
Сначала я реорганизовал файл json, как показано ниже:
{
"reviews": {
"reviewId": "12a3",
"authorName": "Muhammad Arifin",
"comments": {
"userComment": {
"text": "tsangat terbantu👍",
"lastModified": {
"seconds": "1606819245",
"nanos": 835000000
},
"starRating": 5,
"reviewerLanguage": "id",
"device": "1601",
"androidOsVersion": 23,
"appVersionCode": 20365,
"appVersionName": "5.2.73",
"deviceMetadata": {
"productName": "1601 (1601)",
"manufacturer": "Vivo",
"deviceClass": "FORM_FACTOR_PHONE",
"nativePlatform": "ABI_ARM64_V8,ABI_ARM_V7,ABI_ARM",
"cpuModel": "MT6750",
"cpuMake": "Mediatek"
}
},
"developerComment": {
"text": "Terima kasih sudah berbagi, kami sangat senang menjadi bagian dalam pejalanan travel anda!",
"lastModified": {
"seconds": "1606818598",
"nanos": 722000000
}
}
}
,
"tokenPagination": {
"nextPageToken": "abc"
}
}
}
Затем в файле python я применил некоторые функции pandas для управления фреймом данных.
import pandas as pd
df = pd.read_json("data.json")
df['reviewId'] = df['reviews']['reviewId']
df['authorName'] = df['reviews']['authorName']
df['userComment_text'] = df['reviews']['comments']['userComment']['text']
df['userComment_lastModified'] = df['reviews']['comments']['userComment']['lastModified']['seconds']
df['starRating'] = df['reviews']['comments']['userComment']['starRating']
df['deviceMetadata.manufacturer'] = df['reviews']['comments']['userComment']['deviceMetadata']['manufacturer']
df['developerComment.text'] = df['reviews']['comments']['developerComment']['text']
print(df.head())
И вот мой вывод:
reviews ... developerComment.text
authorName Muhammad Arifin ... Terima kasih sudah berbagi, kami sangat senang...
comments {'userComment': {'text': ' sangat terbantu👍', ... ... Terima kasih sudah berbagi, kami sangat senang...
reviewId 12a3 ... Terima kasih sudah berbagi, kami sangat senang...
tokenPagination {'nextPageToken': 'abc'} ... Terima kasih sudah berbagi, kami sangat senang...
Между тем, вы можете изменять строки по своему усмотрению. Я не редактировал их, поскольку вы не предоставили никакой информации о строках.
Я надеюсь, что это сработает для вас
Комментарии:
1. вложенная часть массива создает проблему. «комментарий»: [ { }]