我正在使用以下内容从数据帧梳中选择特定的列,我想将其带入新的数据帧。个人选择工作正常EG:comb.ix [:,0:1],但是当我尝试使用+组合它时我得到一个不好的结果第一个选择([:,0:1])卡在最后当出现在行的末尾时,数据帧和原始col 1中包含的值被擦除。获得我想要的列的正确方法是什么? (我要包含样本数据,但正如您所看到的,列数太多......这就是我尝试这样做的原因)
comb.ix[:,0:1]+comb.ix[:,17:342]
答案 0 :(得分:11)
如果要连接df列的子选择,请使用pd.concat
:
pd.concat([comb.ix[:,0:1],comb.ix[:,17:342]], axis=1)
只要指数匹配,那么这将正确对齐。
感谢@iHightower,您也可以通过传递标签进行子选择:
pd.concat([df.ix[:,'Col1':'Col5'],df.ix[:,'Col9':'Col15']],axis=1)
请注意,.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: []
或使用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: []
请注意,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: []
答案 1 :(得分:1)
我最近仅通过添加范围来解决了该问题
r1 = pd.Series(range(5))
r2 = pd.Series([10,15,20])
final_range = r1.append(r2)
df.iloc[:,final_range]
然后您将获得从0:5到10、15、20的列。
答案 2 :(得分:1)
NumPy有一个名为r_的不错的模块,因此您可以使用现代的数据框选择界面iloc来解决它:
class Taxon
acts_as_nested_set dependent: :destroy
def update_tree_name
if shop_sub_category?
update(display_tree_name: beautiful_name)
else
related_sub_categories = tree_list.select{ |taxon| taxon.kind == "sub_category" }
related_sub_categories.each do |t|
t.update(display_tree_name: t.beautiful_name)
end
end
end
def beautiful_name
"#{parent.parent.parent.name} -> #{parent.parent.name} -> #{parent.name}-> #{name}"
end