全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
1351 1
2024-05-29
悬赏 3 个论坛币 已解决
Python中使用read_stata读取带有中文文本的dta文件,报错
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe4 in position 32764: unexpected end of data
代码如下
复制代码
且read_stata没有encoding参数可以输入
TypeError: read_stata() got an unexpected keyword argument 'encoding'
请问,如何解决以读取文件?

最佳答案

george_dong817 查看完整内容

pandas.read_stata()(尤其是旧版本的 pandas)并不支持手动指定编码参数,当你的 .dta 文件中包含中文等非 ASCII 字符时,就容易出现类似 “UnicodeDecodeError” 的问题。 最简单的办法:安装并使用 pyreadstat,支持手动指定编码,能够比较直接地读取含中文的 Stata 文件。 从根本上解决:在 Stata 中使用较新的版本并保证文件是 Unicode 格式,或者先导出为指定编码的 CSV 再读入。 使用 pyreadstat 库读取 pyreadsta ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2024-5-29 11:04:34
pandas.read_stata()(尤其是旧版本的 pandas)并不支持手动指定编码参数,当你的 .dta 文件中包含中文等非 ASCII 字符时,就容易出现类似 “UnicodeDecodeError” 的问题。

最简单的办法:安装并使用 pyreadstat,支持手动指定编码,能够比较直接地读取含中文的 Stata 文件。
从根本上解决:在 Stata 中使用较新的版本并保证文件是 Unicode 格式,或者先导出为指定编码的 CSV 再读入。

使用 pyreadstat 库读取
pyreadstat 是一个专门用来读取 SPSS、SAS、Stata 等格式数据的 Python 库,且支持指定编码。安装后可以直接用它来代替 pandas.read_stata():

安装 pyreadstat

pip install pyreadstat
读取 .dta 文件并转换为 pandas DataFrame

import pyreadstat

df, meta = pyreadstat.read_dta(
    "E:/InputData.dta",
    encoding='gbk'  # 或者 'gb2312'、'utf-8'、'cp936' 等,视具体文件编码而定
)

print(df.head())
read_dta() 返回的是一个 (df, meta) 的元组,其中 df 是 pandas.DataFrame,meta 包含了文件的元信息(如变量标签、编码信息等)。如果不需要元信息,直接 df 即可。

如果你不确定文件究竟使用了什么编码,可以尝试几种常见的中文编码(gbk, gb2312, utf-8, cp936 等),直到不报错且读取结果正常显示中文。

2. 使用 Stata 自己重新导出 / 转存
如果你可以访问到本机/服务器上的 Stata 软件,可以通过在 Stata 中重新导出文件,以避免编码兼容问题。常见做法包括:

在 Stata 中设定 locale
比如设置 locale 为中文环境之后,再用 saveold 或者 save, version(14) 等方式导出(Stata 14+ 的 .dta 文件是支持 Unicode 的)。

将数据导出为 CSV
在 Stata 中执行

export delimited using "E:/InputData.csv", encoding(utf8)
然后在 Python 中用 pd.read_csv('E:/InputData.csv', encoding='utf-8') 来读取。

这种方法的缺点是,需要额外的导出步骤,但优点是能从数据源头避免编码问题。

3. 使用其他工具/命令行进行编码转换
如果你的 .dta 文件是文本格式存储(有时 Stata 旧版本也是二进制 + 文本混存),也可以尝试先做一次编码转换再读取。
不过 .dta 通常是二进制格式,直接用常规的 iconv 或者 chardet 等方法识别和转换往往无效;若是文本类文件(如 CSV)则可以先用 iconv 转换后再读进来。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群