Переход на Python из R, каков эквивалент Python кадра данных?
Я знаком с держателями данных R, такими как векторы, dataframe и т.д., но вам нужно сделать некоторый анализ текста, и похоже, что у python есть хорошие настройки для этого. Мой вопрос в том, где я могу найти объяснение того, как python хранит данные.
В частности, у меня есть набор данных в файле с разделителями табуляции, где текст находится в третьем столбце, а скоринга данных, которые мне нужны, находится в 4-м столбце.
id1 id2 text score
123 889 "This is the text I need to read..." 88
234 778 "This is the text I need to read..." 78
345 667 "This is the text I need to read..." 91
В R я просто загрузил его в кадр данных с именем df1
, и когда мне захотелось вызвать столбец, я бы использовал df1 $text или df1[,3]
, и если бы мне нужна определенная ячейка, я мог бы использовать df1[1,3]
.
Я получаю представление о том, как читать данные в python, но не о том, как обращаться с табличными структурами.
Как бы вы предложили работать с этим для новичков-питонов?
Ответы
Ответ 2
Ответ г-на Уллриха на использование pandas - это самый близкий подход к кадру данных R. Тем не менее, вы можете получить очень похожие функции, используя массив numpy, при этом тип данных установлен на object
, если это необходимо. Более новые версии numpy имеют свойства имени поля, аналогичные data.frame
, его индексирование на самом деле несколько более мощное, чем R, и его способность содержать объекты выходит далеко за рамки того, что может сделать R.
Я использую как R, так и numpy, в зависимости от задачи. R лучше с формулами и встроенной статистикой. Код Python более удобен в обслуживании и легче подключается к другим системам.
Отредактировано: добавлено примечание, что numpy теперь имеет возможности имени поля
Ответ 3
Я не уверен, насколько хорошо это означает "R", который я никогда не использовал, но на Python я так поступил:
lines = list()
with open('data.txt','r') as f:
for line in f:
lines.append(line.split())
Это будет читать все в списке python. Списки основаны на нуле. Чтобы получить текстовый столбец со второй строки:
print lines[1][2]
Оценка для этой строки:
print lines[1][3]
Ответ 4
В дополнение к Panda DataFrame вы можете использовать библиотеку rpy2 (из http://thread.gmane.org/gmane.comp.python.rpy/1344):
import array
import rpy2.robjects as ro
d = dict(x = array.array('i', [1,2]), y = array.array('i', [2,3]))
dataf = ro.r['data.frame'](**d)
Ответ 5
Один из вариантов, который я использовал в прошлом, - csv.DictReader
, который позволяет ссылаться на данные в строке по имени (каждая строка становится dict
):
import csv
with open('data.txt') as f:
reader = csv.DictReader(f, delimiter = '\t')
for row in reader:
print row
Выход:
{'text': 'This is the text I need to read...', 'score': '88', 'id2': '889', 'id1': '123'}
{'text': 'This is the text I need to read...', 'score': '78', 'id2': '778', 'id1': '234'}
{'text': 'This is the text I need to read...', 'score': '91', 'id2': '667', 'id1': '345'}
Ответ 6
Эквивалент R в python равен Pandas
Вы интериментируете DataFrame, как показано ниже
import pandas as pd
df = pd.read_csv("filename")
print df.head()