我正在尝试将CSV文件读入Pandas中的Dataframe.当我尝试这样做时,我收到以下错误:
UnicodeDecodeError:'utf-8'编解码器无法解码位置55的字节0x96:无效的起始字节
这来自代码:
import pandas as pd
location = r"C:\Users\khtad\Documents\test.csv"
df = pd.read_csv(location, header=0, quotechar='"')
Run Code Online (Sandbox Code Playgroud)
这是在Windows 7企业Service Pack 1计算机上,它似乎适用于我创建的每个CSV文件.在这种特定情况下,位置55的二进制位是00101001,位置54是01110011,如果这很重要的话.
使用文本编辑器将文件保存为UTF-8似乎也没有帮助.同样,添加参数"encoding ='utf-8'也不起作用 - 它返回相同的错误.
导致此错误的最可能原因是什么?除了暂时放弃DataFrame构造并使用csv模块逐行读取CSV之外,还有其他解决方法吗?
我正在做的事情:
我正在尝试将csv文件的格式从空格分隔为逗号分隔.
我做了什么:
我可以很好地摄取csv文件,并逐行将输出打印到控制台.该代码如下所示:
with open(txtpath, mode='r', newline='') as f:
fReader = csv.reader(f)
for rows in fReader:
print(rows)
Run Code Online (Sandbox Code Playgroud)
这完全符合预期,并且检查输出确认行正确读取.
问题:
根据csv.writer上官方的Python3文档,"如果csvfile是一个文件对象,它应该用newline ='' 1打开." 我的代码看起来像这样:
with open(csvpath, 'w') as g:
gWriter = csv.writer(g, newline='')
gWriter.writerows(rows)
Run Code Online (Sandbox Code Playgroud)
总而言之,它看起来像这样:
with open(txtpath, mode='r', newline='') as f:
fReader = csv.reader(f)
for rows in fReader:
print(rows)
with open(csvpath, 'w') as g:
gWriter = csv.writer(g, newline='')
gWriter.writerows(rows)
Run Code Online (Sandbox Code Playgroud)
但是,当我使用Pycharm(选择Anacondas 3.4作为项目解释器)和使用python3 mycode.py从控制台运行代码时,两个结果都告诉我换行"是此函数的无效关键字参数"并引用第42行,是我的编写器对象实例化的地方.我通过调试器运行它,一旦我尝试创建编写器对象,它就会崩溃.如果我不添加换行参数,则会要求提供方言规范,因此也不起作用.
我确信有一些令我眼花缭乱的东西让我失踪,但我看不到它.