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

时间:2016-08-13 07:59:17

标签: python object pandas dataframe

我尝试使用pandas函数读取来自SAS的.sas7bdat格式的数据read_sas:

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

我在df数据框中有两种数据类型 - float64和object。我对float64数据类型完全满意,所以我可以自由地将它转换为int,string等。 问题在于对象数据类型,我可以在df数据框中看到这样包装:

b'Text'

或者像这样:

b'12345'

而不是

Text

12345

我无法将其转换为字符串或整数或者转换为"普通"对象数据类型。我也无法挽救b''使用切片或替换技术。所以我无法使用具有对象数据类型的列。 请告诉我如何摆脱b'

3 个答案:

答案 0 :(得分:8)

添加此encoding="utf-8"

所以该行如下:

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

答案 1 :(得分:4)

首先,找出你的sas数据集编码。 在SAS中,在数据集上运行proc内容。检查“编码”。就我而言,我的编码是“latin1 Western(ISO)”。然后输入您的编码:

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

答案 2 :(得分:0)

encoding中的pd.read_sas()参数使我拥有非常大的数据帧,这导致我遇到了与内存相关的错误。

处理该问题的另一种方法是将字节字符串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?