我试图将csv文件中的数据读入pandas数据帧,并访问第一列'Date'
import pandas as pd
df_ticks=pd.read_csv('values.csv', delimiter=',')
print(df_ticks.columns)
df_ticks['Date']
Run Code Online (Sandbox Code Playgroud)
产生以下结果
Index([u'Date', u'Open', u'High', u'Low', u'Close', u'Volume'], dtype='object')
KeyError: u'no item named Date'
Run Code Online (Sandbox Code Playgroud)
如果我尝试访问任何其他列,如"打开"或"音量",它按预期工作
Gui*_*not 32
正如alko所提到的,它可能是文件开头的额外字符.使用时read_csv,可以指定encoding处理编码和标题字符,称为BOM(字节顺序标记)
df = pd.read_csv('values.csv', delimiter=',', encoding="utf-8-sig")
Run Code Online (Sandbox Code Playgroud)
这个问题在Stackoverflow上找到了一些回声: Pandas在读取制表符分隔的数据时似乎忽略了第一列名称,给出了KeyError
alk*_*lko 23
您最有可能在文件的开头添加一个额外的字符,该字符将添加到您的第一个列名称之前'Date'.只需将输出复制/粘贴到非unicode控制台即可生成.
Index([u'?Date', u'Open', u'High', u'Low', u'Close', u'Volume'], dtype='object')
Run Code Online (Sandbox Code Playgroud)
df.columns = df.columns.str.strip()来删除它们,或者重新访问您的pd.read_csv(或其他 IO 函数)调用以查看是否可以在解析输入时删除它们df.index.names来查看它是否存在。.reset_index()在选择列之前调用应该可以修复它。无论原因是什么,第一步都是停止正在做的事情,运行print(df.columns.tolist())并观察结果,看看可能是这 4 个可能原因中的哪一个。
| 归档时间: |
|
| 查看次数: |
80689 次 |
| 最近记录: |