2012-03-08 18 views
22

Estoy familiarizado con los titulares de datos R como vectores, marcos de datos, etc., pero necesito hacer algunos análisis de texto y parece que Python tiene algunas buenas configuraciones para hacerlo. Mi pregunta es dónde puedo encontrar una explicación de cómo Python guarda los datos.Ir a Python desde R, ¿cuál es el equivalente de Python de un marco de datos?

Específicamente tengo un conjunto de datos en un archivo separado por tabuladores, donde el texto está en la tercera columna y la puntuación de los datos que necesito está en la cuarta columna.

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 

En R que acababa de cargar en un marco de datos denominado df1 y cuando quería llamar a una columna que haría uso de $ texto DF1 o df1[,3] y si quería una celda específica que podría utilizar df1[1,3].

Tengo una idea de cómo leer datos en python, pero no cómo tratar con estructuras similares a tablas.

¿Cómo sugeriría trabajar con esto para un principiante de python?

+0

Python no tiene equivalente a el marco de datos –

+4

@DavidHeffernan ¿Qué hay de eso [pandas] (http://pandas.pydata.org/) cosas? ¿No es eso (pretendido) cercano? – joran

+2

@joran Eso es tercero. Supongo que quise decir que no hay nada integrado en la forma en que está integrado el marco de datos R. –

Respuesta

8

No estoy seguro de lo bien que esto se traduce en 'R', que nunca he usado, pero en Python Éste es cómo lo enfoque:

lines = list() 
with open('data.txt','r') as f: 
    for line in f: 
     lines.append(line.split()) 

que leerá todo en una lista de Python. Las listas están basadas en cero. Para obtener la columna de texto de la segunda línea:

print lines[1][2] 

La puntuación para esa línea:

print lines[1][3] 
4

Una de las opciones que he utilizado en el pasado es csv.DictReader, lo que le permite hacer referencia a datos en una fila por nombre (cada fila se convierte en un dict): salida

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'} 
11

La respuesta del Sr. Ullrich de utilizar la biblioteca pandas es el enfoque más cercano al marco de datos R. Sin embargo, puede obtener una funcionalidad extremadamente similar utilizando numpy array, con el tipo de datos establecido en object si es necesario. Las versiones más nuevas de numpy tienen field name capabilities similar a data.frame, su indexación es en realidad algo más poderosa que R, y su capacidad para contener objetos va mucho más allá de lo que R puede hacer.

Uso tanto R como numpy, dependiendo de la tarea en cuestión. R es mucho mejor con fórmulas y estadísticas incorporadas. El código de Python es más fácil de mantener y más fácil de conectar a otros sistemas.

Editado: nota que numpy ahora tiene capacidades de nombre de campo agregado

+0

El '' data.frame'' de R puede contener columnas 'list'. Cada elemento de una columna 'list' puede ser lo que quieras, incluidos objetos de datos, funciones, etc. ¿Es eso lo que quieres decir? –

0

El equivalente de R en Python es pandas

Usted intialise una trama de datos de la siguiente manera

import pandas as pd 
df = pd.read_csv("filename") 

print df.head() 
Cuestiones relacionadas