Python 尝试用熊猫读取表格时的索引器

Python 尝试用熊猫读取表格时的索引器,python,pandas,Python,Pandas,更新:这是“”的副本,但首先回答了这个问题 我不能让这个密码为我的生活工作。只要我去掉names参数,它就可以正常工作,但这太傻了 从以空格分隔的文件中,我希望: 跳过标题部分 导入选定列 列的名称 将两列解析为日期 使用解析的日期作为索引 这几乎奏效了: 将panadas导入为pd 列=[4,5,10,11,15,16,17,26,28,29] 名称=[“日期”、“时间”、“数据链路”、“数据链路”、“SLAT”、“SLON”、“SHGT”、“HGT”、“N”、“E”] ppp\u数据=

更新:这是“”的副本,但首先回答了这个问题


我不能让这个密码为我的生活工作。只要我去掉
names
参数,它就可以正常工作,但这太傻了

从以空格分隔的文件中,我希望:

  • 跳过标题部分
  • 导入选定列
  • 列的名称
  • 将两列解析为日期
  • 使用解析的日期作为索引
这几乎奏效了:

将panadas导入为pd
列=[4,5,10,11,15,16,17,26,28,29]
名称=[“日期”、“时间”、“数据链路”、“数据链路”、“SLAT”、“SLON”、“SHGT”、“HGT”、“N”、“E”]
ppp\u数据=pd.read\u表格(
文件名,
delim_whitespace=True,#空格分隔
skiprows=8,#跳过标题行
header=None,#不使用第一行作为列名
usecols=列,#仅使用选定列
名称=名称,#使用选定列的名称
解析_dates=[[4,5]],#连接日期和时间列并解析为日期
index_col=0,使用解析的日期(现在是第0列)作为索引
)
打印ppp_数据
但这是我得到的堆栈跟踪

Traceback (most recent call last):
  File "plot_squat_test_pandas.py", line 30, in <module>
    index_col=0,
  File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 400, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 205, in _read
    return parser.read()
  File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 608, in read
    ret = self._engine.read(nrows)
  File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 1028, in read
    data = self._reader.read(nrows)
  File "parser.pyx", line 706, in pandas.parser.TextReader.read (pandas/parser.c:6745)
  File "parser.pyx", line 728, in pandas.parser.TextReader._read_low_memory (pandas/parser.c:6964)
  File "parser.pyx", line 804, in pandas.parser.TextReader._read_rows     (pandas/parser.c:7780)
  File "parser.pyx", line 865, in pandas.parser.TextReader._convert_column_data (pandas/parser.c:8512)
  File "parser.pyx", line 1105, in pandas.parser.TextReader._get_column_name (pandas/parser.c:11684)
IndexError: list index out of range
我错过了什么?或者这是panadas的问题,我应该去做一个bug报告


我使用的是python 2.7.3,上面的堆栈跟踪来自稳定版本0.12.0。我在开发版本0.13.0rc1-119-g2485e09中尝试过这一点,得到了相同的结果(不同的行号)。

名称
有10个元素:

In [1]: len(["DATE","TIME","DLAT", "DLON", "SLAT", "SLON", "SHGT", "HGT", "N", "E"])
Out[1]: 10
但是当您省略
名称
参数时,
read\u table
仅解析8列:

Data columns (total 8 columns):
因此,如果所需的数据帧有8列和一个索引,
names
可能有9(或8)个元素

注意

parse_dates=[[4,5]],    
正在将第4列和第5列合并为一列。因此,即使原始数据有10列,剩下的是8列和一个索引。如果将
名称
设为9个元素,则第一个元素用于命名索引。

这是pandas在当前开发版本0.13.0rc1-119-g2485e09之前的版本中的一个名称。有两种变通办法

解决方法1 将表的最后一列同时包含在
usecols
names
中将抑制
索引器

从StringIO导入StringIO
作为pd进口熊猫
数据=“2013-10-11 11:53:49,1,2,3,4
2013-10-11 11:53:50,1,2,3,4
2013-10-11 11:53:51,1,2,3,4"""
df=pd.read\u csv(
StringIO(数据),
标题=无,
usecols=[0,2,4],
名称=[“日期”、“第2列”、“第4列”],
parse_dates=[“DATE”],
索引_col=0,
)
打印df
解决方法2 或者,您可以在事实之后添加列,如中所示

ppp_data.rename(columns=dict(zip(columns[2:],names)),inplace=True)

I get
ValueError:如果切换到8或9列名称,则传递的标题名称不匹配使用COLS
。我尝试从
usecols
参数中删除第4列和第5列,只为8个数据列使用名称。与之前相同的结果,
索引器
parse_dates=[[4,5]],