繁体   English   中英

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

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

对于一个任务,我目前正在尝试将 RData 文件导入到 python 中,其中包含文本内容和内容的类别。 我查看了 web 并在 python 中找到了允许我执行此操作的 RData package。 然而 package 假定文本的编码是 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 $1.13bn (\xc2\xa3600m) 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")

~\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 package,您可以使用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 package 的作者。

convert function 接受关键字参数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"))

如果您对 package 有进一步的疑问,请随时在 Github 存储库中展开讨论。 我会收到通知,通常可以在同一天回复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM