我从csv文件加载一些机器学习数据 . 前两列是观察,其余列是特征 .
目前,我做以下事项:
data = pandas.read_csv('mydata.csv')
这给出了类似的东西:
data = pandas.DataFrame(np.random.rand(10,5), columns = list('abcde'))
我想将这个数据帧分成两个数据帧:一个包含 a
和 b
列,另一个包含 c
, d
和 e
列 .
写不出类似的东西是不可能的
observations = data[:'c']
features = data['c':]
我不确定最好的方法是什么 . 我需要 pd.Panel
吗?
顺便说一句,我发现数据帧索引非常不一致:允许 data['a']
,但 data[0]
不允许 . 另一方面,不允许 data['a':]
,但 data[0:]
是 . 这是否有实际原因?如果列由Int索引,这确实令人困惑,因为 data[0] != data[0:1]
9 回答
2017答案 - pandas 0.20:.ix已弃用 . 使用.loc
见deprecation in the docs
.loc
使用基于标签的索引来选择行和列 . 标签是索引或列的值 . 使用.loc
切片包含最后一个元素 ..loc
接受Python列表对行和列执行的相同切片表示法 . 切片表示法start:stop:step
您可以按行和列切片 . 例如,如果您有5行标签
v
,0127976,x
,0127978,z
DataFrame.ix索引是您要访问的内容 . 这有点令人困惑(我同意Pandas索引有时令人困惑!),但以下似乎做你想要的:
其中.ix [行切片,列切片]是正在解释的内容 . 关于Pandas索引的更多内容:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-advanced
Note:
.ix
自Pandas v0.20以来已被弃用 . 您应该根据需要使用.loc
或.iloc
.让我们使用seaborn包中的泰坦尼克数据集作为例子
要么
另外,给定一个DataFrame
在你的例子中,如果你想只提取a和d列(e.i.第1和第4列),你需要的是大熊猫数据帧中的iloc mothod,并且可以非常有效地使用 . 您需要知道的是要提取的列的索引 . 例如:
会给你
您可以通过引用列表中每列的名称来切割
DataFrame
的列,如下所示:如果你来到这里寻找切割两个范围的列并将它们组合在一起(像我一样),你可以做类似的事情
这将创建一个新的数据框,其中前900列和(所有)列> 3593(假设您的数据集中有大约4000列) .
以下是使用不同方法进行选择性列切片的方法, including selective label based, index based and the selective ranges based column slicing.
它的等价物
如果数据框看起来像这样:
和OUTPUT可能是一样的
如果你使用逻辑运算符np.logical_not
更多关于
https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.logic.html
其他逻辑运算符
logical_and(x1,x2,/ [,out,where,...])按元素计算x1和x2的真值 .
logical_or(x1,x2,/ [,out,where,casting,...])按元素计算x1 OR x2的真值 .
logical_not(x,/ [,out,where,casting,...])计算NOT x元素的真值 .
logical_xor(x1,x2,/ [,out,where,..])按元素计算x1 XOR x2的真值 .