使用RData包将RData文件解析为Python时更改编码类型



对于一项任务,我目前正在尝试将一个RData文件导入到python中,该文件包含文本内容和内容类别。我浏览了一下网络,发现python中的RData包允许我这样做。然而,该包假定文本的编码是ASCII,而实际上是UTF-8。我已经查看了文档,但找不到更改这种标准假定编码的方法。

以下是我尝试使用的代码:

import rdata
parsed = rdata.parser.parse_file("news_dataset.rda")
converted = rdata.conversion.convert(parsed)
converted_df = pd.DataFrame(converted.get("df_final"))

运行此程序时,会生成以下错误(我已将路径中不相关的部分排除在外(:

conversion_conversion.py:266: UserWarning: Unknown encoding. Assumed ASCII.
warnings.warn("Unknown encoding. Assumed ASCII.") 

由于这种错误的转换,我得到了一些奇怪的句子,比如:

b'Ad sales boost Time Warner profitnnQuarterly profits at US media giant TimeWarner jumped 76% to $1.13bn (xc2xa3600m) for the three months to December, from $639m year-earlier.

我假设这个方法应该能够处理这个问题,但我不知道如何在转换方法中使用。

这里有人能帮我吗?提前感谢!

[编辑]我也尝试过pyreadr,但当导入模块时,我得到了以下错误:

ImportError                               Traceback (most recent call last)
<ipython-input-1-007a02a03c5d> in <module>
----> 1 import pyreadr
2 
3 result = pyreadr.read_r("news_dataset.rda")
~AppDataRoamingPythonPython37site-packagespyreadr__init__.py in <module>
----> 1 from .pyreadr import read_r, list_objects, write_rds, write_rdata, download_file
2 from .custom_errors import PyreadrError, LibrdataError
3 
4 __version__ = "0.4.4"
5 
~AppDataRoamingPythonPython37site-packagespyreadrpyreadr.py in <module>
8 import pandas as pd
9 
---> 10 from ._pyreadr_parser import PyreadrParser, ListObjectsParser
11 from ._pyreadr_writer import PyreadrWriter
12 from .custom_errors import PyreadrError
~AppDataRoamingPythonPython37site-packagespyreadr_pyreadr_parser.py in <module>
15     pass
16 
---> 17 from .librdata import Parser
18 from .custom_errors import PyreadrError
19 
ImportError: DLL load failed: the specified module could not be found

显然,这是因为pyreadr是用python 2.0而不是python 3.0(我正在使用的版本(编写的。使用2to3,您应该能够进行此转换。但这对我来说还没有奏效。

我是rdata包的管理员。

convert函数接受关键字参数default_encoding,当字符串中未显式声明时,可以使用该参数指定所使用的编码。

如果编码被明确声明但错误,也可以使用force_default_encoding

你的代码是:

import rdata
parsed = rdata.parser.parse_file("news_dataset.rda")
converted = rdata.conversion.convert(parsed, default_encoding="utf8")
converted_df = pd.DataFrame(converted.get("df_final"))

如果您对该软件包有进一步的疑问,请随时在Github repo中展开讨论。我收到了这些通知,通常可以在同一天回答。

如果不强制使用RData包,则可以使用pyreadr来完成相同的任务。pyreadr读取.rda文件,默认情况下采用UTF-8编码。

pip install pyreadr

假设";df_ final";是密钥,其值是一个数据帧,

import pyreadr
result = pyreadr.read_r("news_dataset.rda")
# Print keys
print(result.keys())
# Assuming "df_final" is one of the keys, 
# load it into a pandas dataframe
df = results["df_final"]

关于pyreadr的更多信息:https://github.com/ofajardo/pyreadr

最新更新