Python [[0]]含义

时间:2017-07-28 17:52:02

标签: python pandas kaggle

我正在运行Python脚本(Kaggle脚本)。它适用于3.4.5 virtualenv,但不适用于3.5.2

我不确定为什么,我不熟悉[[0]]语法。以下是摘录。

import pandas as pd
data = pd.read_csv(r'path\train.csv')
labels_flat = data[[0]].values.ravel()

它应该从csv的第一列产生一个值列表。

在3.5.2中我收到此错误:

KeyError: '[0] not in index'

我尝试用

复制值
labels_flat = []
lf = data.values.tolist()
for row in lf:
    labels_flat.append(row[0])

但我不认为这是一回事。

1 个答案:

答案 0 :(得分:4)

我不认为问题在于语法,您的Dataframe只包含您正在寻找的索引。

对我而言,这有效:

In [1]: data = pd.DataFrame({0:[1,2,3], 1:[4,5,6], 2:[7,8,9]})
In [2]: data[[0]]
Out[2]: 
   0
0  1
1  2
2  3

我认为让你对[[0]]语法感到困惑的是,方括号在python中用于两个完全不同的东西,[[0]]语句使用两者:

A. []用于创建列表。在上面的示例中,[0]创建了一个包含单个元素0的列表。

B。 []也用于访问列表中的元素(或dict,...)。因此data[0]会返回data的第0个元素。

下一个混乱的事情是,虽然通常的python列表是由数字索引的(例如data[4]data的4.元素),但是Pandas Dataframes可以通过列表索引。这是一种语法糖,可以一次轻松访问数据帧的多个列。 因此,在上面的示例中,要获取列01,您可以执行以下操作:

In [3]: data[[0, 1]]
Out[3]: 
   0  1
0  1  4
1  2  5
2  3  6

此处内部[0, 1]创建一个包含元素01的列表。外部[ ]使用内部列表作为索引来检索数据帧的列。

为了更具可读性,请看一下,它完全相同:

In [4]: l = [0, 1]

In [5]: data[l]
Out[5]: 
   0  1
0  1  4
1  2  5
2  3  6

如果您只想要第一列(列0),则可以获得:

In [6]: data[[0]]
Out[6]: 
   0
0  1
1  2
2  3

这正是您所寻找的。