我有一个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']