Python [[0]] 意思

Python [[0]] meaning

我是运行一个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])

但我认为这不是一回事

我不认为问题出在语法上,你的 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. [] 也用于访问列表(或字典,...)中的元素。所以 data[0] returns 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

这正是您要找的。