【问题标题】:Convert .CSV files to .DTA files in Python在 Python 中将 .CSV 文件转换为 .DTA 文件
【发布时间】:2013-10-10 12:32:07
【问题描述】:

我希望通过 Python 将许多 .CSV 文件转换为 .DTA 文件的过程自动化。 .DTA 文件是由 Stata Statistics 语言处理的文件类型。

但是,我还没有找到一种方法来执行此操作。

R 语言有write(.dta),它允许将 R 中的数据帧转换为 .dta 文件,并且通过 RPy 从 Python 到 R 语言的端口,但我不知道如何使用 RPy 访问 R 中的 write(.dta) 函数。

有什么想法吗?

【问题讨论】:

  • 获取 DTA 文件的规范并相应地解析 CSV?
  • 我似乎不明白它是一个二进制文件有什么关系,因为您可以使用 python 处理二进制数据就好了。
  • @Parseltongue:您仔细阅读了 RPy 文档吗?附言基本上,问题是否归结为“如何在 R 中编写 DFA 文件?”

标签: python r csv stata dta


【解决方案1】:

您需要用于 Python 的 rpy2 以及安装在 R 中的 foreign 包。您可以通过启动 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")')

您可以根据需要从 Python 变量构造传递给 robjects.r 的字符串,例如:

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

【讨论】:

    【解决方案2】:

    (从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')
    

    免责声明:第一步很慢(在我的测试中,读取 51 MB 数据大约需要 1 分钟 - 另请参阅 this question),第二步会生成一个文件比原来的大(在我的测试中,大小从 51 MB 到 111MB)。 Spacedman 的答案可能看起来不那么优雅,但它可能更有效。

    【讨论】:

    • 警告不熟悉 Stata 的人:请注意 .dta 格式不是常数,而是取决于 Stata 的版本。 Stata X 可以读取版本 X 或更低版本的 .dta 文件,但它不一定读取更高版本的 .dta 文件。格式平均每 2 个版本改变一次,所以大约每 4 年改变一次。有文档。我的印象是 R 对这些变化有反应,所以通过 R 通常是一个很好的解决方案。我无法对 Pandas 发表评论。
    • @NickCox 是的。只能说pandas能打开一个比X晚的版本(不知道是哪个,但是我的STATA X打不开),然后导出的dta就可以用STATA X打开了。
    • 听起来对您有好处,除非转换过程正在降级数据并在您和使用“相同”数据的其他人之间造成不一致。不太可能,但要小心。正如我的评论,正确的程序名称是 Stata。
    • 是的,Stata,对不起。就我而言,我验证了我的所有结果都与原始结果一样可重现。也就是说,源代码确实警告了几个“未实现”(据我所知是次要的)功能:github.com/pydata/pandas/blob/master/pandas/io/stata.py
    猜你喜欢
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2017-11-14
    • 2020-11-03
    • 2017-07-20
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多