Pandas从数据帧中选择不连续的列

dar*_*dog 9 python pandas

我正在使用以下内容从数据帧梳中选择特定的列,我想将其添加到新的数据帧中.个人选择工作正常EG:comb.ix [:,0:1],但是当我尝试使用+组合它们时我得到一个不好的结果第一个选择([:,0:1])卡在最后当出现在行的末尾时,数据帧和原始col 1中包含的值被擦除.获得我想要的列的正确方法是什么?(我会包含样本数据,但正如您所看到的,列数太多......这就是我尝试这样做的原因)

comb.ix[:,0:1]+comb.ix[:,17:342]
Run Code Online (Sandbox Code Playgroud)

EdC*_*ica 12

如果要连接df列的子选择,请使用pd.concat:

pd.concat([comb.ix[:,0:1],comb.ix[:,17:342]], axis=1)
Run Code Online (Sandbox Code Playgroud)

只要指数匹配,那么这将正确对齐.

感谢@iHightower,您也可以通过传递标签进行子选择:

pd.concat([df.ix[:,'Col1':'Col5'],df.ix[:,'Col9':'Col15']],a??xis=1)
Run Code Online (Sandbox Code Playgroud)

请注意,.ix将在以后的版本中弃用以下内容:

In [115]:
df = pd.DataFrame(columns=['col' + str(x) for x in range(10)])
df

Out[115]:
Empty DataFrame
Columns: [col0, col1, col2, col3, col4, col5, col6, col7, col8, col9]
Index: []

In [118]:
pd.concat([df.loc[:, 'col2':'col4'], df.loc[:, 'col7':'col8']], axis=1)
?
Out[118]:
Empty DataFrame
Columns: [col2, col3, col4, col7, col8]
Index: []
Run Code Online (Sandbox Code Playgroud)

或使用iloc:

In [127]:
pd.concat([df.iloc[:, df.columns.get_loc('col2'):df.columns.get_loc('col4')], df.iloc[:, df.columns.get_loc('col7'):df.columns.get_loc('col8')]], axis=1)

Out[127]:
Empty DataFrame
Columns: [col2, col3, col7]
Index: []
Run Code Online (Sandbox Code Playgroud)

请注意,iloc切片是打开/关闭的,因此不包括结束范围,因此如果要包含它,则必须在感兴趣的列之后找到该列:

In [128]:
pd.concat([df.iloc[:, df.columns.get_loc('col2'):df.columns.get_loc('col4')+1], df.iloc[:, df.columns.get_loc('col7'):df.columns.get_loc('col8')+1]], axis=1)

Out[128]:
Empty DataFrame
Columns: [col2, col3, col4, col7, col8]
Index: []
Run Code Online (Sandbox Code Playgroud)


nev*_*ves 8

NumPy 有一个不错的模块,名为r_,允许您使用现代 DataFrame 选择界面 iloc 来解决它:

df.iloc[:, np.r_[0:1, 17:342]]
Run Code Online (Sandbox Code Playgroud)

我相信这是一个更优雅的解决方案。

它甚至支持更复杂的选择:

df.iloc[:, np.r_[0:1, 5, 16, 17:342:2, -5:]]
Run Code Online (Sandbox Code Playgroud)