问题描述
ad
data = self._reader.read(nrows)
File "pandas\_libs\parsers.pyx",line 826,in pandas._libs.parsers.TextReader.read
File "pandas\_libs\parsers.pyx",line 841,in pandas._libs.parsers.TextReader._read_low_memory
File "pandas\_libs\parsers.pyx",line 920,in pandas._libs.parsers.TextReader._read_rows
File "pandas\_libs\parsers.pyx",line 1052,in pandas._libs.parsers.TextReader._convert_column_data
File "pandas\_libs\parsers.pyx",line 1083,in pandas._libs.parsers.TextReader._convert_tokens
File "pandas\_libs\parsers.pyx",line 1220,in pandas._libs.parsers.TextReader._convert_with_dtype
File "pandas\_libs\parsers.pyx",line 1238,in pandas._libs.parsers.TextReader._string_convert
File "pandas\_libs\parsers.pyx",line 1429,in pandas._libs.parsers._string_Box_utf8
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 2: invalid start byte
阅读CSV时出现错误
要纠正这一点,我使用了unicode转义:
csv_df=pd.read_csv(file_path,header=0,squeeze=True,dtype=str,keep_default_na=False,encoding='unicode_escape')
但是, 现在我得到\ xa0两个单词之间的空格:
'ObjectStatus': 'IN\xa0SERVICE'
我的CSV具有:
Key Values
RequestID
ObjectType CONTAINER
ObjectName INMUNVMBMHPBNB6001ENBCMW005
ObjectStatus IN SERVICE
ObjectType CONTAINER
解决方法
unicode_escape
编解码器用于文字转义码(长度4 \\xa0
与长度1 \xa0
)。如图所示,这只是Python对该字符串的调试表示,它会打印\xa0
以表明它不是常规空间。您的文件可能是用cp1252
或latin1
编码的,因为\xa0
是这些编码中的NO-BREAK SPACE
。
示例:
>>> d = {'ObjectStatus': 'IN\xa0SERVICE'}
>>> d
{'ObjectStatus': 'IN\xa0SERVICE'}
>>> print(d['ObjectStatus'])
IN SERVICE
,
对我来说,下面已经奏效了。 使用 str.replace() 我已经用 ' '
替换了具有 '\xa0' 的列中的所有值csv_df = pd.read_csv(file_path,header=0,squeeze=True,dtype=str,keep_default_na=False)
csv_df['Values'] = csv_df['Values'].astype(str).str.replace(u'\xa0',' ')
我不得不将这些值传递给另一个创建 XML 的函数,尝试了所有编码,但都没有奏效。