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

Change encoding type when parsing RData file into Python using Rdata package

对于我目前正在尝试将 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 profit\n\nQuarterly profits at US media giant TimeWarner jumped 76% to .13bn (\xc2\xa3600m) for the three months to December, from 9m year-earlier.

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

这里有人可以帮助我吗?提前致谢!

[编辑] 我也尝试过 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")

~\AppData\Roaming\Python\Python37\site-packages\pyreadr\__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 

~\AppData\Roaming\Python\Python37\site-packages\pyreadr\pyreadr.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

~\AppData\Roaming\Python\Python37\site-packages\pyreadr\_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 包,您可以使用 pyreadr 来完成相同的任务。 pyreadr 读取 .rda 文件并默认采用 UTF-8 编码。

pip install pyreadr

假设“df_final”为key,其值为dataframe,

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

我是 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 存储库中进行讨论。我会收到通知,通常可以在同一天回复。