2016-03-29 15 views
5

Tôi đang tìm cách làm việc trên tệp SPSS (.sav) bằng cách sử dụng pandas. Trong sự vắng mặt của chương trình SPSS, đây là những gì một file điển hình trông giống như khi chuyển đổi sang .csv:Làm thế nào để bảo quản Nhãn khi tệp SPSS (.sav) được nhập vào gấu trúc qua rpy?

enter image description here

Mở điều tra về những gì hai hàng đầu tiên biểu thị (Tôi không biết SPSS), có vẻ như hàng đầu tiên chứa Label s, trong khi hàng thứ hai chứa VarName s.

enter image description here

Khi tôi đưa file vào gấu trúc như sau:

import pandas.rpy.common as com 

def savtocsv(filename): 
    w = com.robj.r('foreign::read.spss("%s", to.data.frame=TRUE)' % filename) 
    w = com.convert_robj(w) 
    return w 

và sau đó làm một cái đầu(), dòng đầu tiên (Label) là mất tích:

enter image description here

Nhãn có thể được duy trì như thế nào?

Trả lời

3

Nhãn trong một file sav được lưu trữ trong variable.labels thuộc tính của đối tượng trở về từ read.spss chức năng.

Bạn có thể nhận được các nhãn biến như sau:

import pandas.rpy.common as com 

def get_labels(filename): 
    w = com.robj.r('attr(foreign::read.spss("%s"), "variable.labels")' % filename) 
    w = com.convert_robj(w) 
    return w 

Nếu bạn muốn thiết lập các nhãn như tên cột của dataframe của bạn:

import pandas.rpy.common as com 

def savtocsv(filename): 
    w = com.robj.r('foreign::read.spss("%s", to.data.frame=TRUE)' % filename) 
    cols = list(com.robj.r("attr")(w, "variable.labels")) 
    w = com.convert_robj(w) 
    w.columns = cols 
    return w 
+0

Tuyệt vời, điều đó dường như làm những gì tôi cần, cảm ơn. Tôi đoán tôi có thể sau đó một người nào đó với gấu trúc nêm này vào được các tiêu đề cột, thay thế các giá trị varName. Nhưng có thể thực hiện chuyển đổi ** và ** bao gồm các nhãn trong một lần (một cuộc gọi đến 'com.robj.r()'), để lưu bàn giao để thực hiện thao tác hơn nữa trong gấu trúc không? – Pyderman

+1

Có thể đọc tệp một lần và nhận các thuộc tính trên đối tượng trả về nhưng nó sẽ yêu cầu một cuộc gọi r khác mà tôi nghĩ. Vui lòng xem bản cập nhật. – ayhan

+0

Hoạt động tốt, cảm ơn agin. – Pyderman

Các vấn đề liên quan