Как отформатировать Dataframe, преобразованный из словаря - PullRequest
1 голос
/ 10 апреля 2019

Я очень плохо знаком с Python + кодированием в целом, и у меня проблема с фреймами данных в пандах.

Я читаю файл обзоров Amazon (файлы можно найти здесь: http://snap.stanford.edu/data/web-Amazon-links.html) и хочу создать фрейм данных из данных.

Мне удалось преобразоватьрецензирует в dict и устанавливает его в dataframe, но вывод дает мне 3 отдельных dataframes для каждого значения столбца.

Как объединить три dataframes в один с column_names = ["Names",Цены »,« Количество баллов »,« Средние баллы »] и строки = [dict_key: [цены, количество баллов, средний балл]

Я думаю, что проблема заключается в пробелах или \ n. Однако яУ меня проблема с выяснением, где разделить пробелы. Я думал, что уже разделил проверки моей строкой в ​​начале моего кода.

Извините, если это глупый вопрос, я просто очень заблудилсясейчас. Спасибо.

import pandas as pd
import statistics 
#!pip install pandas==0.23.4

data = open('Pet_Supplies.txt','r')
data_text = data.read()
data_split = data_text.strip().split('\n\n')
data.close()
review_dict={}
for x in data_split:  
  names_obj=re.search('(product/title:\s)(.*)',x)
  names=names_obj.group(2)
  prices_obj = re.search('product/price:\s(.*)\n',x) 
  prices = prices_obj.group(1)
  score_obj = re.search('\d\.\d\n',x)
  scores=score_obj.group(0)
  if names in review_dict:
    num_reviews = review_dict[names][1]+1
    sum_scores = float(scores)*float(num_reviews)
    mean_score = sum_scores/num_reviews
    review_dict[names]=[prices,num_reviews,mean_score]
  else:
       review_dict[names]=[prices,1,float(scores)]
df = pd.DataFrame.from_dict(review_dict, orient='index',columns=("Price","Number of Reviews","Mean Price")).rename_axis('Names')
print(df)
``

I expected the results to be:


Name             Price    Num Reviews  Mean Score

Product_1         8.0              14            4.3


My actual code gives me:

                                                     Price  \
Names                                                         
Orbee Tuff Ball Orange - SMALL                         6.95  

                                                     Number of Reviews  \
Names                                                                   
Orbee Tuff Ball Orange - SMALL                         4 

                                                     Mean Price  
Names                                                           
Orbee Tuff Ball Orange - SMALL                         5.0

1 Ответ

0 голосов
/ 10 апреля 2019

Чтобы было ясно, что вы хотите сделать, это измените параметры отображения для просмотра информационного кадра, а не изменяйте сам информационный кадр, что мне кажется очень хорошим.

Если вы хотите видеть каждую строку кадра данных в одной строке, когда вы печатаете его на экране, вы можете изменить параметры отображения панд. Например, использование pd.set_option('display.width', 180) заставит фрейм данных проходить весь путь через монитор стандартного размера (по умолчанию ширина равна 90, половина экрана, чтобы два вывода можно было просматривать рядом).

Возможно, вы действительно хотите изменить фрейм данных. Причина, по которой вы видите информацию «Имена», состоит в том, что она является индексом вашего фрейма данных. Если вы удалили «Имена» из индекса фрейма данных и сделали его столбцом, он будет печататься иначе. Вы можете сделать это с df = df.reset_index(). Теперь индекс будет просто серией чисел, а «Имена» будут столбцом в данных. Попробуйте и посмотрите, как после этого печатается датафрейм. Продолжайте играть, но в конечном итоге это всего лишь личные предпочтения, основанные на том, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...