首页 > 解决方案 > 尝试使用 python 将 kdb 转换为 csv,除一列外,所有内容都正确转换

问题描述

我已将 kdb 查询转换为数据框,然后将该数据框上传到 csv 文件。这导致了一个编码错误,我很容易通过解码为 utf-8 来修复它。但是,有一个列这不起作用。

“nameFid”是无法正常工作的列,它在 CSV 文件中输出为“b'STRING”

我正在运行 Python 3.7,我很乐意提供所需的任何其他信息。

这是我的代码,它对我从 kdb 获得的数据帧中的数据进行解码

  for ba in df.dtypes.keys():
        if df.dtypes[ba] == 'O':
            try:
                df[ba] = df[ba].apply(lambda x: x.decode('UTF-8'))
            except Exception as e:
                print(e)
return df

这适用于除“nameFid”之外的每一列

UnicodeDecodeError:“utf-8”编解码器无法解码位置 6 中的字节 0xdc:无效的继续字节 -

这是我得到的一个错误,但我认为这表明数据没有使用 UTF-8 编码,这肯定意味着所有列都不起作用?

当使用 try except 时,它会打印“'Series' object has no attribute 'decode'”。

我的目标是从当前显示的列值中删除“b”

" b'字符串' "

我不确定我还需要添加什么。如果你需要帮助,请告诉我。

也很抱歉,我对这一切都很陌生。

标签: pythonpandascsvencodingqpython

解决方案


许多编码彼此部分兼容。这主要是由于 ASCII 的流行,所以它们中的很多将向后兼容 ASCII,但扩展方式不同。因此,如果您的其他列仅包含数字等内容,则它们可能仅限 ASCII,并且可以使用许多不同的编码。

然而,引发错误的列包含一些超出正常 ASCII 范围的字符,因此编码开始变得重要。如果您不知道文件的编码,您可以chardet尝试猜测它。请记住,这只是猜测。使用不同的编码进行解码可能不会引发任何错误,但可能会导致最终文本中出现错误的字符,因此您应该始终知道要使用哪种编码。

这就是说,如果您在 Linux 上,标准file实用程序通常能够让您粗略猜测所使用的编码,但是对于更高级的用例,例如 chardet 是必要的。

一旦你找到了正确的编码,就说你发现它latin-1只是decode('utf-8')decode('latin-1').


推荐阅读