在Python中将.CSV文件转换为.DTA文件
我希望通过Python将许多.CSV文件转换为.DTA文件的过程自动化。DTA文件是由Stata统计语言处理的文件类型 然而,我还没能找到一种方法来做这件事在Python中将.CSV文件转换为.DTA文件,python,r,csv,stata,dta,Python,R,Csv,Stata,Dta,我希望通过Python将许多.CSV文件转换为.DTA文件的过程自动化。DTA文件是由Stata统计语言处理的文件类型 然而,我还没能找到一种方法来做这件事 R语言具有允许将R中的数据帧转换为.dta文件的功能,并且有一个通过RPy从Python到R语言的端口,但我不知道如何使用RPy访问R中的write(.dta)函数 有什么想法吗?您需要Python的rpy2,以及安装在R中的外来包。您可以通过启动R并键入安装.packages(“外来”)来实现这一点。然后可以退出R并返回Python 那么
R
语言具有允许将R中的数据帧转换为.dta文件的功能,并且有一个通过RPy从Python到R语言的端口,但我不知道如何使用RPy访问R中的write(.dta)函数
有什么想法吗?您需要Python的rpy2,以及安装在R中的
外来
包。您可以通过启动R并键入安装.packages(“外来”)
来实现这一点。然后可以退出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)
对于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)
(从复制粘贴)
数据帧对象现在有一个“to_stata”方法。例如,你可以这样做
import pandas as pd
df = pd.read_stata('my_data_in.dta')
df.to_stata('my_data_out.dta')
免责声明:第一步非常慢(在我的测试中,读取51 MB dta大约需要1分钟-另请参见),第二步生成的文件可能比原始文件大很多(在我的测试中,大小从51 MB到111MB)。Spacedman的答案可能看起来不那么优雅,但可能更有效。(从中复制粘贴)
数据帧对象现在有一个“to_stata”方法。例如,你可以这样做
import pandas as pd
df = pd.read_stata('my_data_in.dta')
df.to_stata('my_data_out.dta')
免责声明:第一步非常慢(在我的测试中,读取51 MB dta大约需要1分钟-另请参见),第二步生成的文件可能比原始文件大很多(在我的测试中,大小从51 MB到111MB)。Spacedman的答案可能看起来不那么优雅,但可能更有效。获取DTA文件的规范并相应地解析CSV?我似乎不明白这是一个二进制文件有什么关系,因为您可以在二进制数据上使用python。@Parseltongue:您彻底阅读了RPy文档吗?另外,基本上,问题是否归结为“如何在R中编写DFA文件?”?可能有用-您试过了吗?获取DTA文件的规范并相应地解析CSV?我似乎不明白这是一个二进制文件有什么关系,因为您可以在二进制数据上使用python。@Parseltongue:您彻底阅读了RPy文档吗?另外,基本上,问题是否归结为“如何在R中编写DFA文件?”?可能有用-您尝试过吗?对那些不熟悉Stata的人的警告:请注意.dta格式不是常量,而是取决于Stata的版本。Stata X可以读取X或更低版本的.dta文件,但不一定读取更高版本的.dta文件。格式平均每2个版本就改变一次,因此大约每4年改变一次。有文件。我的印象是R对这些变化做出了响应,所以通过R通常是一个很好的解决方案。我不能对熊猫发表评论。我只能说pandas能够打开比X更晚的版本(不知道是哪一个,但我的STATA X无法打开),然后可以使用STATA X打开导出的dta。这听起来对您很好,除非转换过程降级数据,并在您和使用“相同”数据的其他人之间造成不一致。不太可能,但要小心。在我的评论中,正确的程序名是Stata。是的,Stata,对不起。在我的案例中,我验证了我的所有结果与原始结果一样是可复制的。这就是说,源代码确实警告了几个“未实现”(据我判断是次要的)特性:警告那些不熟悉Stata的人:请注意.dta格式不是常量,而是取决于Stata的版本。Stata X可以读取X或更低版本的.dta文件,但不一定读取更高版本的.dta文件。格式平均每2个版本就改变一次,因此大约每4年改变一次。有文件。我的印象是R对这些变化做出了响应,所以通过R通常是一个很好的解决方案。我不能对熊猫发表评论。我只能说pandas能够打开比X更晚的版本(不知道是哪一个,但我的STATA X无法打开),然后可以使用STATA X打开导出的dta。这听起来对您很好,除非转换过程降级数据,并在您和使用“相同”数据的其他人之间造成不一致。不太可能,但要小心。在我的评论中,正确的程序名是Stata。是的,Stata,对不起。在我的案例中,我验证了我的所有结果与原始结果一样是可复制的。也就是说,源代码确实警告了几个“未实现”(据我判断是次要的)特性: