我正在运行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])
但我不认为这是一回事。
答案 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可以通过列表索引。这是一种语法糖,可以一次轻松访问数据帧的多个列。
因此,在上面的示例中,要获取列0
和1
,您可以执行以下操作:
In [3]: data[[0, 1]]
Out[3]:
0 1
0 1 4
1 2 5
2 3 6
此处内部[0, 1]
创建一个包含元素0
和1
的列表。外部[ ]
使用内部列表作为索引来检索数据帧的列。
为了更具可读性,请看一下,它完全相同:
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
这正是您所寻找的。 p>