在 python 中保存 .dta 文件
我想知道是否有人知道一个Python包,可以让你以统计数据分析软件Stata的.dta
格式保存numpy数组/recarrays。这确实会加快我所拥有的系统中的几个步骤。
I'm wondering if anyone knows a Python package that allows you to save numpy arrays/recarrays in the .dta
format of the statistical data analysis software Stata. This would really speed up a few steps in a system I have.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
scikits.statsmodels 包包含一个 Stata 数据文件阅读器,正如 @Sven 所指出的,它部分依赖于 PyDTA。特别是,
genfromdta()
将返回一个ndarray
,例如从Python 2.7/statsmodels 0.3.1开始:
可以依次使用
savetxt()
函数将数组保存为文本文件,可以在Stata中导入。例如,我们可以将上面的内容导出为并在没有字典文件的 Stata 中读取它,如下所示:
我相信在不久的将来应该添加一个
*.dta
阅读器。The scikits.statsmodels package includes a reader for Stata data files, which relies in part on PyDTA as pointed out by @Sven. In particular,
genfromdta()
will return anndarray
, e.g.from Python 2.7/statsmodels 0.3.1:
The
savetxt()
function can be used in turn to save an array as a text file, which can be imported in Stata. For example, we can export the above asand read it in Stata without a dictionary file as follows:
I believe a
*.dta
reader should be added in the near future.我能找到的唯一用于 STATA 互操作性的 Python 库仅提供对
.dta< 的只读访问/代码> 文件。然而,R
foreign
库提供了一个函数write.dta
和 RPy 提供R 的 Python 接口。也许是以下组合这些工具可以帮助你。The only Python library for STATA interoperability I could find merely provides read-only access to
.dta
files. The Rforeign
library however provides a functionwrite.dta
, and RPy provides a Python interface to R. Maybe the combination of these tools can help you.pandas DataFrame 对象现在有一个“to_stata”方法。因此,您可以执行
免责声明:第一步非常慢(在我的测试中,读取 51 MB dta 大约需要 1 分钟 - 另请参阅 这个问题),第二个生成的文件可能比原始文件大得多(在我的测试中,大小从 51 MB 变为 111MB)。 这个答案可能看起来不太优雅,但它可能更有效。
pandas DataFrame objects now have a "to_stata" method. So you can do for instance
DISCLAIMER: the first step is quite slow (in my test, around 1 minute for reading a 51 MB dta - also see this question), and the second produces a file which can be way larger than the original one (in my test, the size goes from 51 MB to 111MB). This answer may look less elegant, but it is probably more efficient.