我有一个 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'
或其他 with 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['-新日期时间']
关于python pandas 读取列名中的 csv 文件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38468750/