2013-10-10 2 views
1

Я ищу для автоматизации процесса преобразования многих файлов .CSV в файлы .DTA через Python. .DTA-файлы - это тип файла, который обрабатывается языком статистики Stata.Преобразование файлов .CSV в файлы .DTA в Python

Однако я не смог найти способ сделать это.

R язык имеет write(.dta) которая позволяет dataFrame в R должны быть преобразованы в файл .dta, и есть порт на языке R от Python через RPY, но я не могу понять, как использовать RPY для доступ к функции записи (.dta) в R.

Любые идеи?

+0

Получить спецификацию файла DTA и правильно разобрать CSV? –

+0

это двоичный файл – Parseltongue

+0

Я, кажется, не понимаю, что здесь имеет значение, поскольку это двоичный файл, так как вы можете работать с python по двоичным данным. –

ответ

3

Вам нужен rpy2 для Python, а также пакет foreign, установленный в R. Вы делаете это, запустив R и набрав install.packages("foreign"). Затем вы можете выйти из R и вернуться на Python.

Тогда это:

import rpy2.robjects as robjects 
robjects.r("require(foreign)") 
robjects.r('x=read.csv("test.csv")') 
robjects.r('write.dta(x,"test.dta")') 

Вы можете построить строку, переданную в robjects.r от переменных Python, если вы хотите, что-то вроде:

robjects.r('x=read.csv("%s")' % fileName) 
+0

Это работает. Большое спасибо. – Parseltongue

1

(copypasting от my answer to a previous question)

pandas DataFrame объекты теперь имеют метод «to_stata». Так что вы можете сделать, например

import pandas as pd 
df = pd.read_stata('my_data_in.dta') 
df.to_stata('my_data_out.dta') 

ОТКАЗ: первый шаг довольно медленно (в моем тесте около 1 минуты для чтения 51 МБ ДТА - также см this question), а второй создает файл, который может быть больше, чем исходный (в моем тесте размер идет от 51 МБ до 111 МБ). Ответ Spacedman может выглядеть менее изящным, но он, вероятно, более эффективен.

+1

Предупреждение тем, кто не знаком со Stata: имейте в виду, что формат .dta не является константой, но зависит от версии Stata. Stata X может читать .dta-файлы для версии X или ниже, но он не может читать .dta-файлы для более высоких версий. Формат менялся примерно каждые 2 версии в среднем, примерно один раз в 4 года. Имеется документация. Мне кажется, что R реагирует на эти изменения, поэтому переход через R обычно будет хорошим решением. Я не могу комментировать Панды. –

+0

@NickCox true. Я могу только сказать, что панды смогли открыть версию позже X (не знаю, какой из них, но мой STATA X не смог ее открыть), а затем экспортированный dta можно было открыть с помощью STATA X. –

+0

Звучит неплохо для вас, за исключением случаев, когда процесс преобразования понижает данные и создает несоответствия между вами и другими людьми, использующими «одни и те же» данные. Вряд ли, но будьте осторожны. Как и в моем комментарии, правильным названием программы является Stata. –

Смежные вопросы