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

dok*_*ktr 8 python object dataframe pandas

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

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

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

b'Text'
Run Code Online (Sandbox Code Playgroud)

或者像这样:

b'12345'
Run Code Online (Sandbox Code Playgroud)

代替

Text
Run Code Online (Sandbox Code Playgroud)

要么

12345
Run Code Online (Sandbox Code Playgroud)

我不能将它分别转换为字符串或int或"普通"对象数据类型.此外,我不能使用切片或替换技术来使用b''.所以我无法使用具有对象数据类型的列.请告诉我如何摆脱b''.

MAF*_*303 11

加上这个 encoding="utf-8"

所以这一行将如下:

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

  • 这给了我一个错误“UnicodeDecodeError:'utf-8'编解码器无法解码位置0中的字节0xd4:无效的连续字节” (4认同)
  • 编码可以是`encoding =“ ISO-8859-1” (3认同)

Eri*_*ric 7

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

df = pd.read_sas('filename', format = 'sas7bdat', encoding = 'latin-1')
Run Code Online (Sandbox Code Playgroud)

  • 完美,这工作得很好..从整个数据框中删除了 b' ' 。谢谢 (2认同)