我尝试使用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'
。答案 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
有用的链接: