如何将pandas列拆分为多个列

18 浏览
0 Comments

如何将pandas列拆分为多个列

我从一个CSV文件中加载一些机器学习数据。前两列是观测值,其余列是特征。

目前,我做了以下操作:

data = pandas.read_csv('mydata.csv')

这会得到类似于:

data = pandas.DataFrame(np.random.rand(10,5), columns = list('abcde'))

我想把这个数据框切分成两个数据框:一个包含列ab,另一个包含列cde

不可能这样写:

observations = data[:'c']
features = data['c':]

我不确定最好的方法是什么。我需要一个pd.Panel吗?

顺便说一下,我觉得数据框索引非常不一致:data['a']是允许的,但data[0]不允许。另一方面,data['a':]不允许,但data[0:]是允许的。

这是有实际原因的吗?如果列是按整数索引的,这真的很令人困惑,因为data[0] != data[0:1]

0
0 Comments

在使用Pandas进行数据处理的过程中,有时候我们需要将一个列拆分成多个列。上述内容中提到了使用.ix方法来实现这个目的,但是这个方法在Pandas v0.20版本之后已经被弃用,应该使用.loc或者.iloc方法来代替。

在上述内容中,给出了一个例子来说明如何使用.ix方法来拆分列。首先创建一个DataFrame对象df,然后使用.ix方法来选择列'b'到最后一列,并将结果保存在新的DataFrame对象中。代码如下:

df = DataFrame(np.random.rand(4,5), columns = list('abcde'))
df.ix[:,'b':]

输出结果为:

      b         c         d         e
0  0.418762  0.042369  0.869203  0.972314
1  0.991058  0.510228  0.594784  0.534366
2  0.407472  0.259811  0.396664  0.894202
3  0.726168  0.139531  0.324932  0.906575

在这个例子中,.ix[row slice, column slice]表示选择指定的行和列。更多关于Pandas索引的信息可以参考http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-advanced

需要注意的是,Pandas中的范围包括起始点和结束点。例如,代码`data.ix[:, 'a':'c']`会选择包括列'a'、'b'和'c'的所有列。

另外,可以通过传递多个列的索引来选择多个列,例如`df.ix[:,[0,3,4]]`。

上述内容中还提到了使用.loc方法代替.ix方法的好处,可以参考stackoverflow.com/a/31593712/4323

需要注意的是,.ix方法已经被弃用,不应该再使用。因此,旧的回答需要被删除。

0
0 Comments

问题的原因是用户想要将一个pandas列拆分成多个列。解决方法是使用.loc进行标签索引来选择行和列,并利用切片操作将列拆分成多个列。

以下是解决问题的具体步骤:

1. 使用.loc选择所有行和从'foo'到'sat'(包括'sat')的所有列:

df.loc[:, 'foo':'sat']

2. 使用.loc选择从'foo'到'cat',每隔2个列:

df.loc[:, 'foo':'cat':2]

3. 使用.loc选择从开始到'bar'的所有列:

df.loc[:, :'bar']

4. 使用.loc选择从'quz'到末尾,每隔3个列:

df.loc[:, 'quz'::3]

5. 使用.loc选择从'sat'到'bar'的列(注意:由于切片方向错误,不会返回任何列):

df.loc[:, 'sat':'bar']

6. 使用.loc选择从'sat'到'bar'的列,并逆序返回:

df.loc[:, 'sat':'bar':-1]

7. 使用.slice函数来选择从'quz'到末尾,每隔2个列:

df.loc[:, slice('quz',None, 2)]

8. 使用.loc选择特定的列,如'foo','bar'和'dat':

df.loc[:, ['foo','bar','dat']]

9. 使用.loc选择从'w'到'y'行和从'foo'到'ant'列,每隔3个列:

df.loc['w':'y', 'foo':'ant':3]

10. 如果在apply函数中使用lambda函数,可以使用.loc来选择特定列,例如:

df['newcol'] = df.apply(lambda row: myfunc(row), axis=1)

在myfunc函数中,可以使用row['foo':'ant']来访问这些列。

使用.loc函数可以方便地对pandas列进行切片和选择,通过指定起始和结束位置以及步长,可以将一列拆分成多个列。

0