Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将.CSV文件转换为.DTA文件_Python_R_Csv_Stata_Dta - Fatal编程技术网

在Python中将.CSV文件转换为.DTA文件

在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 那么

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

然而,我还没能找到一种方法来做这件事

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,对不起。在我的案例中,我验证了我的所有结果与原始结果一样是可复制的。也就是说,源代码确实警告了几个“未实现”(据我判断是次要的)特性: