Разделение json строк данных на несколько столбцов pandas данных - PullRequest
0 голосов
/ 31 января 2020

При чтении данных от json до pandas столбцы рейтингов отелей по нескольким критериям читаются, как показано ниже. У меня есть 2 столбца в моем рейтингах данных и ReviewID. Поскольку я считываю фрейм данных из большего Json столбца «Рейтинг» имеет одну запись для каждого рецензента, которая имеет вид:

`result.head()
                            Ratings                      ReviewID
0   {'Service': '5', 'Cleanliness': '5', 'Overall'...     12
1   {'Service': '4', 'Cleanliness': '4', 'Overall'...     54
2   {'Service': '5', 'Cleanliness': '5', 'Overall'...     48
3   {'Service': '5', 'Cleanliness': '5', 'Overall'...     90
4   {'Service': '5', 'Cleanliness': '5', 'Overall'...     75`

Моя цель состоит в том, чтобы разделить столбец рейтинга на 7 различных столбцов, каждый из которых имеет значение соответствующего критерия: `

ReviewID Service Cleanliness Value Rooms Location Check-in Desk  Overall
27        1          1        5      4     5        5       5      4
9         1          5        5      5     5        4       3      5
22        6          3        2      4     3        3       3      3`

Любые рекомендации по форматированию будут очень полезны ..

доступный фрейм данных обязательный фрейм данных

Ответы [ 2 ]

1 голос
/ 02 февраля 2020

Приведенный ниже код работал для меня `

Rating = result['Ratings'].values.tolist()
 rate = pd.DataFrame(Rating,columns =['Service', 'Cleanliness','Overall'])


   Service   Cleanliness     Overall
         0        5               5
         1        4               4`
0 голосов
/ 31 января 2020

Если ваш фрейм данных выглядит следующим образом:

from ast import literal_eval
pd.set_option('display.max_colwidth', -1)
print(df)



                                                 Ratings ReviewID
0  {'Service': '5', 'Cleanliness': '5', 'Overall': '10'}     12  
1  {'Service': '4', 'Cleanliness': '4', 'Overall': '10'}     54  
2  {'Service': '5', 'Cleanliness': '5', 'Overall': '10'}     48  
3  {'Service': '5', 'Cleanliness': '5', 'Overall': '10'}     90  
4  {'Service': '5', 'Cleanliness': '5', 'Overall': '10'}     75` 

, тогда нам просто нужно буквально интерпретировать каждую строку как словарь python и распаковать ее с pd.Series

json_series = df['Ratings'].map(literal_eval).apply(pd.Series)

дает вам

  Service Cleanliness Overall
0  5       5           10    
1  4       4           10    
2  5       5           10    
3  5       5           10    
4  5       5           10    

это, дает нам фрейм данных с тем же индексом, мы можем затем констатировать это обратно:

pd.concat([df,json_series],axis=1)

                                                 Ratings ReviewID Service  \
0  {'Service': '5', 'Cleanliness': '5', 'Overall': '10'}     12    5        
1  {'Service': '4', 'Cleanliness': '4', 'Overall': '10'}     54    4        
2  {'Service': '5', 'Cleanliness': '5', 'Overall': '10'}     48    5        
3  {'Service': '5', 'Cleanliness': '5', 'Overall': '10'}     90    5        
4  {'Service': '5', 'Cleanliness': '5', 'Overall': '10'}     75`   5        

  Cleanliness Overall  
0  5           10      
1  4           10      
2  5           10      
3  5           10      
4  5           10      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...