问题 在python中保存.dta文件


我想知道是否有人知道一个Python包,它允许你保存numpy数组/重组 .dta 统计数据分析软件Stata的格式。这真的会加速我所拥有的系统中的几个步骤。


10217
2017-09-21 16:42


起源

究竟是什么.dta文件应该是什么? - Sven Marnach
.dta文件是与数据相关联的文件格式,主要用于统计计算程序STATA。我不太了解要详细说明的文件类型,但这里可能会有更多详细信息: filext.com/file-extension/DTA - mike
您似乎误解了所有具有扩展名的文件 .dta 有一个共同的格式。这不是真的。您感兴趣的文件格式特定于STATA,似乎不在任何其他软件中使用。这里是 格式的文档我非常怀疑是否有一个能够编写这种格式的库。 - Sven Marnach
可能你可以使用STATA infile命令 导入使用Python生成的CSV文件。 - Sven Marnach
我可以使用infile / insheet命令将.csv文件引入STATA,但.dta文件可以附加(即堆叠)比引入.csvs,保存它们,引入其他文件的过程快许多倍。 csvs(这是一个相当低效的程序,但对我的团队的研究是必要的)。 - mike


答案:


大熊猫 DataFrame对象现在具有“to_stata”方法。所以你可以这样做

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

免责声明: 第一步很慢(在我的测试中,大约1分钟读取51 MB的dta - 也看到了 这个问题),第二个产生的文件可能比原来的大(在我的测试中,大小从51 MB到111MB)。 这个答案 可能看起来不那么优雅,但它可能更有效率。


2
2018-04-15 08:57





scikits.statsmodels 软件包包括一个Stata数据文件的阅读器,它部分依赖于@Sven指出的PyDTA。尤其是, genfromdta() 将返回 ndarray,例如 来自Python 2.7 / statsmodels 0.3.1:

>>> import scikits.statsmodels.api as sm
>>> arr = sm.iolib.genfromdta('/Applications/Stata12/auto.dta')
>>> type(arr)
<type 'numpy.ndarray'>

savetxt() 函数可以依次用于将数组保存为文本文件,可以在Stata中导入。例如,我们可以将上面的内容导出为

>>> sm.iolib.savetxt('auto.txt', arr, fmt='%2s', delimiter=",")

并在没有字典文件的Stata中读取它,如下所示:

. insheet using auto.txt, clear

我相信一个 *.dta 读者应该在不久的将来添加。


8
2018-01-29 19:24





唯一的 用于STATA互操作性的Python库 我发现只提供只读访问权限 .dta 文件。 R foreign 但是库提供了一个功能 write.dta,和 RPY 为R提供了一个Python接口。也许这些工具的组合可以帮助你。


6
2017-09-21 18:45