Преобразование типа данных в R или Python

Я имею данные amazon и хотел бы преобразовать его в формат csv либо в R, либо в Python. Исходные данные, которые я имею в виду следующим образом:

product/productId: B000GKXY3 product/title: Nun Chuck product/price: 17.99 review/userId: ADX8VLDUOL7BG review/profileName: M. Gingras product/productId: B000GKXY34 product/title: Nun Chuck product/price: 17.99 review/userId: A3NM6P6BIWTIAE review/profileName: Maria Carpenter 

И я хочу изменить его в формате csv, выглядя так:

 product/productId, product/title, product/price, review/userId, review/profileName B000GKXY34, Nun Chuck, 17.99, ADX8VLDUOL7BG, M. Gingras B000GKXY34, Nun Chuck, 17.99, A3NM6P6BIWTIAE, Maria Carpenter 

Набор данных amazon выглядит немного уникальным для меня и не имеет понятия, как преобразовать его в формат csv. Я в основном использую R, но также открыт для Python. Итак, любой, кто знает, как это сделать с помощью R или Python, поделитесь своими мыслями.

Заранее спасибо.

3 Solutions collect form web for “Преобразование типа данных в R или Python”

Вот один из способов сделать это в R. Требуется, чтобы поля (порядок и имена) были идентичны для всех блоков данных, а блоки данных разделены пустыми строками. Я предполагаю, что есть более простые способы сделать это, возможно, с plyr ?

Читайте в некоторых данных. Вы можете указать readLines в текстовом файле.

 dat <- readLines(textConnection('product/productId: B000GKXY3 product/title: Nun Chuck product/price: 17.99 review/userId: ADX8VLDUOL7BG review/profileName: M. Gingras product/productId: B000GKXY34 product/title: Nun Chuck product/price: 17.99 review/userId: A3NM6P6BIWTIAE review/profileName: Maria Carpenter product/productId: B000GKXY35 product/title: Nun Chuck product/price: 17.99 review/userId: A3NM6P6BIWTIAF review/profileName: Someone Else')) # Identify blocks of data (assuming blank line indicates a new block) # and split to list L. L <- split(dat, rep(seq_along(diff(c(0, which(dat==''), length(dat)))), diff(c(0, which(dat==''), length(dat))))) # Remove empty elements. L <- lapply(L, function(x) x[x != '']) # rbind to a matrix M <- do.call(rbind, L) # Extract column names nm <- sub(':.*$', '', M[1, ]) # Remove column names from matrix elements M <- gsub('^.*: *', '', M) # Add column names attribute colnames(M) <- nm M product/productId product/title product/price review/userId review/profileName 1 "B000GKXY3" "Nun Chuck" "17.99" "ADX8VLDUOL7BG" "M. Gingras" 2 "B000GKXY34" "Nun Chuck" "17.99" "A3NM6P6BIWTIAE" "Maria Carpenter" 3 "B000GKXY35" "Nun Chuck" "17.99" "A3NM6P6BIWTIAF" "Someone Else" 

Затем вы можете легко принудить к data.frame чтобы сделать product/price числовой, если это плавает на вашей лодке.

Я предполагаю, что у вас есть фиксированный список полей. В этом случае вы можете генерировать csv следующим образом:

 buff = [] # buffer with values for one output row with open('source.txt') as inp: with open('target.txt', 'w') as out: for line in inp: if line == '\n': # blank string in input separates rows for output out.write('%s\n' % ','.join(buff)) buff = [] # clear buffer else: buff.append(line.rstrip('\n').split(': ')[1]) if buff: # if buffer is not empty, we have to write it to last row out.write('%s\n' % ','.join(buff)) 

Предполагая, что ваши данные соответствуют вашему образцу: упорядочен, 5 строк, 6-й пустой …

 #!/usr/bin/env python # -*- coding: utf-8 -*- def partition(l, n): def _part(): for i in xrange(0, len(l), n): yield l[i:i+n] return [i for i in _part()] def loadData(): with open('data.dat') as f: return [row.split(': ') for row in f.read().splitlines() if row ] data = partition(loadData(), 5) headers = [[h[0] for h in data[0]]] columns = [[col[1] for col in row] for row in data] _data = headers + columns print "\n".join(",".join(row) for row in _data) 

Результаты:

 product/productId,product/title,product/price,review/userId,review/profileName B000GKXY3,Nun Chuck,17.99,ADX8VLDUOL7BG,M. Gingras B000GKXY34,Nun Chuck,17.99,A3NM6P6BIWTIAE,Maria Carpenter 
  • Как реализовать R p.adjust в Python
  • Вопрос Bizzarre, пытающийся сделать Rpy2 2.1.9 работать с R 2.12.1, используя Python 2.6 под Windows xp - Rpy не может найти R.dll?
  • Иерархические байесов для R или Python
  • Ошибка R_HOME с rpy2
  • Как нарисовать график, соединяющий точки с двух времен измерения?
  • Разбор XML-файла и его хранение в базе данных
  • Какой объект перейти к R из rpy2?
  • Python-понимание в R?
  • Есть ли хороший учебник по настройке механизма подсчета очков Augustus PMML в качестве веб-сервиса?
  • Python эквивалент функции головы и хвоста R
  • Как преобразовать трехбуквенные аминокислотные коды в один буквенный код с помощью python или R?
  • Python - лучший язык программирования в мире.