我有一个csv文件,前两行数据为:

NewDateTime ResourceName
9/18/12 1:00    ANACACHO_ANA
9/18/12 2:00    ANACACHO_ANA

当我使用pandas数据帧读取它时:
df = pd.read_csv(r'MyFile.csv')

我明白了
df1.columns
Index([u'NewDateTime', u'ResourceName', dtype='object')

但是,当我尝试
df1['NewDateTime']

我得到错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 5: ordinal not in range(128)

我的pycharm解释器上的df1['NewDateTime']和df1['-NewDateTime']中一样有一个小破折号,但是当我粘贴到这里时,破折号不会出现

最佳答案

CSV文件似乎有一个BOM (Byte Order Mark) signature,因此请尝试使用'utf-8-sig''utf-16'或其他BOM编码进行解析:

df = pd.read_csv(r'MyFile.csv', encoding='utf-8-sig')

下面是一个小演示:
In [18]: pd.read_csv(fn).columns
Out[18]: Index([u'?NewDateTime', u'ResourceName'], dtype='object')

In [19]: pd.read_csv(fn, encoding='utf-8-sig').columns
Out[19]: Index([u'NewDateTime', u'ResourceName'], dtype='object')

在我的iPython终端中,BOM签名在?中显示为u'?NewDateTime'-在您的情况下,它是一个破折号:df1['-NewDateTime']

10-07 18:23