Преобразование типа данных в 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 из python с помощью rpy2
  • Создание коррелированных данных в Python (3.3)
  • Каковы эквиваленты Pandon pandas для R-функций, таких как str (), summary () и head ()?
  • SQLite или текстовый файл?
  • Отправить вложение в R с помощью gmail
  • Есть ли эквивалент pandas dplyr :: summary?
  • Что такое эквивалент Python (numpy или scipy или Pandas) для функции adjboxStats R?
  • Функция R expand.grid () в Python
  •  
    Interesting Posts for Van-Lav

    Каков предпочтительный традиционный способ включения сторонней библиотеки в проекты с открытым исходным кодом на Python?

    Почему этот сценарий оболочки называется скриптом python?

    комбинация pytest и покрытия не работает

    Плюсы и минусы использования разреженных матриц в python / R?

    Измените количество тиков x-оси на морских участках

    Лучший способ вычислить фундаментальную матрицу поглощающей цепи Маркова?

    Ошибка Boost.python в примере hello world

    Django Admin с использованием RESTful API vs Database

    Есть ли известная ошибка Win32 Tkinter в отношении отображения фотографий на холсте?

    Самый эффективный способ Python выбрать самую длинную строку в списке?

    Python Try Catch Block внутри лямбда

    Ошибка Google OAuth2 redirect_uri_mismatch

    Python и threading: почему «большой» объект списка теряется при обращении от другого метода?

    Python: обновляйте XML-файл с помощью ElementTree, сохраняя при этом максимально возможный макет

    Django: как предварительно заполнить форму при использовании немодельных данных?

    Python - лучший язык программирования в мире.