使用read_sas后,如何从pandas对象类型中的b'Text'获取文本?

2024-05-23 04:18:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用pandas函数read_SAS从.sas7bdat格式的SAS读取数据:

import pandas as pd
df = pd.read_sas('D:/input/houses.sas7bdat', format = 'sas7bdat')
df.head()

在df dataframe中有两种数据类型:float64和object。我完全满意float64数据类型,因此可以自由地将其转换为int、string等。 问题在于对象数据类型,我可以在如下包装的df数据框中看到:

b'Text'

或者像这样:

b'12345'

而不是

Text

或者

12345

我不能将其分别转换为string或int或“normal”对象数据类型。另外,我不能用切片或替换技术来消除b''。所以我不能使用对象数据类型的列。 求你了,告诉我怎样才能摆脱b'。


Tags: 对象函数textpandasdfreadstring格式
3条回答

添加这个encoding="utf-8"

因此,行如下:

df = pd.read_sas('D:/input/houses.sas7bdat', format = 'sas7bdat', encoding="utf-8")

pd.read_sas()中的encoding参数导致我有非常大的数据帧,这会导致我出现与内存相关的错误。

处理这个问题的另一种方法是将字节字符串convert转换成另一种编码(例如utf8)。

示例:

数据帧示例:


df = pd.DataFrame({"A": [1, 2, 3], 
                   "B": [b"a", b"b", b"c"], 
                   "C": ["a", "b", "c"]})

将字节字符串转换为字符串:

for col in df:
    if isinstance(df[col][0], bytes):
        print(col, "will be transformed from bytestring to string")
        df[col] = df[col].str.decode("utf8")  # or any other encoding
print(df)

输出:

   A  B  C
0  1  a  a
1  2  b  b
2  3  c  c

有用的链接:

  1. Pandas Series.str.decode() page of GeeksforGeeks(我找到解决方案的地方)

  2. What is the difference between a string and a byte string?

首先,找出sas数据集编码。 在SAS中,对数据集运行proc contents。检查“编码”。在我的例子中,我的编码是“latin1 Western(ISO)”。然后输入编码:

df = pd.read_sas('filename', format = 'sas7bdat', encoding = 'latin-1')

相关问题 更多 >

    热门问题