2012-03-08 42 views
22

Tôi quen thuộc với các chủ sở hữu dữ liệu R như vectơ, dataframe, v.v. nhưng cần phải làm một số phân tích văn bản và có vẻ như python có một số thiết lập tốt để làm như vậy. Câu hỏi của tôi là nơi tôi có thể tìm thấy một lời giải thích về cách python giữ dữ liệu.Đi tới Python từ R, tương đương python của một khung dữ liệu là gì?

Cụ thể tôi có tập dữ liệu trong tệp được phân tách bằng tab nơi văn bản ở cột thứ 3 và điểm của dữ liệu tôi cần ở cột thứ 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 

Trong R Tôi muốn chỉ cần tải nó vào một khung dữ liệu có tên df1 và khi tôi muốn gọi một cột tôi muốn sử dụng $ text df1 hoặc df1[,3] và nếu tôi muốn có một tế bào cụ thể tôi có thể sử dụng df1[1,3].

Tôi nhận được cảm giác về cách đọc dữ liệu vào trăn nhưng không phải cách xử lý bảng như cấu trúc.

Bạn đề xuất làm việc với điều này như thế nào cho người mới sử dụng python?

+0

Python không có tương đương với khung dữ liệu –

+4

@DavidHeffernan Còn về những thứ [gấu trúc] (http://pandas.pydata.org/) thì sao? Không phải là (dự định được) đóng? – joran

+2

@joran Đó là bên thứ ba. Tôi cho rằng tôi có nghĩa là không có gì được xây dựng theo cách mà khung dữ liệu R được xây dựng. –

Trả lời

8

Tôi không chắc chắn như thế nào này dịch để 'R' mà tôi không bao giờ được sử dụng, nhưng trong Python đây là cách tôi sẽ tiếp cận nó:

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

Đó sẽ đọc tất cả mọi thứ trong một danh sách python. Danh sách không dựa trên. Để có được cột văn bản từ dòng thứ hai:

print lines[1][2] 

Điểm số cho dòng đó:

print lines[1][3] 
4

Một lựa chọn mà tôi đã sử dụng trong quá khứ là csv.DictReader, cho phép bạn tham chiếu dữ liệu trong một hàng bằng cách tên (mỗi hàng sẽ trở thành một dict):

import csv 
with open('data.txt') as f: 
    reader = csv.DictReader(f, delimiter = '\t') 
    for row in reader: 
     print row 

Output:

{'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

Câu trả lời của ông Ullrich khi sử dụng thư viện pandas là cách tiếp cận gần nhất với khung dữ liệu R. Tuy nhiên, bạn có thể nhận được chức năng cực kỳ tương tự bằng cách sử dụng numpy array, với loại dữ liệu được đặt thành object nếu cần. Phiên bản mới hơn của numpy có field name capabilities tương tự như một data.frame, việc lập chỉ mục của nó thực sự có phần mạnh hơn R, và khả năng chứa các đối tượng vượt xa những gì R có thể làm.

Tôi sử dụng cả R và vón cục, tùy thuộc vào nhiệm vụ trong tầm tay. R là cách tốt hơn với các công thức và các số liệu thống kê tích hợp. Mã Python dễ bảo trì hơn và dễ dàng hơn để kết nối với các hệ thống khác.

được sửa đổi: bổ sung lưu ý rằng NumPy hiện nay có khả năng tên trường

+0

'data.frame' của R có thể chứa các cột' list'. Mỗi phần tử của một cột 'danh sách' có thể là bất kỳ thứ gì bạn thích bao gồm các đối tượng dữ liệu, hàm, v.v. Đó là ý của bạn? –

0

Tương đương của R trong python là Pandas

Bạn intialise một DataFrame như sau

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

print df.head() 
Các vấn đề liên quan