我继承了以Stata .dta格式保存的数据文件.我可以用scikits.statsmodels
genfromdta()
函数加载它.这将我的数据放入一维NumPy数组中,其中每个条目都是一行数据,存储在24元组中.
In [2]: st_time = time.time(); initialload = sm.iolib.genfromdta("/home/myfile.dta"); ed_time = time.time(); print (ed_time - st_time)
666.523324013
In [3]: type(initialload)
Out[3]: numpy.ndarray
In [4]: initialload.shape
Out[4]: (4809584,)
In [5]: initialload[0]
Out[5]: (19901130.0, 289.0, 1990.0, 12.0, 19901231.0, 18.0, 40301000.0, 'GB', 18242.0, -2.368063, 1.0, 1.7783716290878204, 4379.355, 66.17669677734375, -999.0, -999.0, -0.60000002, -999.0, -999.0, -999.0, -999.0, -999.0, 0.2, 371.0)
Run Code Online (Sandbox Code Playgroud)
我很好奇是否有一种有效的方法将其安排到Pandas DataFrame中.根据我的阅读,逐行构建DataFrame看起来效率很低......但我的选择是什么?
我写了一个非常慢的第一遍,它只是将每个元组作为单行DataFrame读取并附加它.只是想知道是否还有其他更好的东西.
我有一个700mb .dta Stata文件,有2800万个观测值和14个列变量
当我尝试使用外部的 read.dta()函数导入R 时,我的8GB机器上的RAM耗尽(页面输出非常快速地射入GB).
staph <- read.dta("Staph_1999_2010.dta")
Run Code Online (Sandbox Code Playgroud)
我在周围寻找,听起来更有效的替代方案是使用memisc包中的Stata.file()函数.
我打电话的时候:
staph <- Stata.file("Staph_1999_2010.dta")
Run Code Online (Sandbox Code Playgroud)
我得到一个段错误:
*** caught segfault ***
address 0xd5d2b920, cause 'memory not mapped'
Traceback:
1: .Call("dta_read_labels", bf, lbllen, padding)
2: dta.read.labels(bf, len.lbl, 3)
3: get.dictionary.dta(dta)
4: Stata.file("Staph_1999_2010.dta")
Run Code Online (Sandbox Code Playgroud)
我发现Stata.file()的文档很难理解.
(1)我使用Stata.file()
得当吗?
(2)Stata.file()
返回像read.dta()这样的数据帧吗?
(3)如果我Stata.file()
正确使用,我该如何解决我得到的错误?
我从USGS网站上下载了.dat格式的空间数据,我无法用textedit读取它 - 它只是说"../ofr041189it03/vat.adf".我熟悉STATA,ArcGIS和GeoDA,所以我希望将它转换为可以被任何这些程序(最好是STATA)读取的类型,但不知道如何.有任何想法吗?
所以我知道可以使用convert_categoricals参数读取Stata分类标签或值。
我正在寻找一种将 pandas 数据帧写入/导出到 Stata 并包含值标签的方法。然而我能找到的只是
data_label : str, optional
对于数据集标签
或者
variable_labels : dict
对于列名标签,
但对于价值观本身来说却毫无意义。