如何在不删除列名的情况下选择数据框列df [' col']?
df
index colname col1 col2 col3
1 0 1 2
2 3 4 5
3 6 7 8
4 9 10 11
期望的输出:
df['col1']
index colname col1
1 0
2 3
3 6
4 9
正确回答编辑,df [[' col1']]完成工作......现在有点棘手。如果列是多索引的,该怎么办?
df grpname A B ... Z
index colname cA1 ... cAN cB1 ... cBN ... cZ1 ... cZN
1 a11 ... a1N b11 ... b1N ... z11 ... z1N
2 a21 ... a2N b21 ... b2N ... z21 ... z2N
3 a31 ... a3N b31 ... b3N ... z31 ... z3N
4 a41 ... a4N b41 ... b4N ... z41 ... z4N
我想要
df grpname A
index colname cA1 cA2
1 a11 a12
2 a21 a22
3 a31 a32
4 a41 a42
看起来.xs()只允许我检索某个列,即df.xs((' A',' cAi'),level =(' grpname',' colname'),axis = 1,drop_level = False))和df [[' A']] [' cA1':& #39; cAi']也不起作用?
答案 0 :(得分:0)
对于单个列选择,df['col']
将返回一个系列,如果你想保留列名,那么你需要加倍下标,它将返回一个数据帧:
In [2]:
import pandas as pd
pd.set_option('display.notebook_repr_html', False)
import io
temp = """index col1 col2 col3
1 0 1 2
2 3 4 5
3 6 7 8
4 9 10 11"""
df = pd.read_csv(io.StringIO(temp), sep='\s+',index_col=[0])
df
Out[2]:
col1 col2 col3
index
1 0 1 2
2 3 4 5
3 6 7 8
4 9 10 11
In [4]:
df[['col1']]
Out[4]:
col1
index
1 0
2 3
3 6
4 9
与此形成鲜明对比:
In [5]:
df['col1']
Out[5]:
index
1 0
2 3
3 6
4 9
Name: col1, dtype: int64
修改强> 正如@joris指出你可以看到名称显示在输出的底部,名称不会因为输出不同而丢失
答案 1 :(得分:0)
如果您确定每列占用的空间,有一种方法可以做到这一点。 这是the example ...
np.loadtxt("df.txt",
dtype={
'names': ('index', 'colname', 'col1', 'col2', 'col3'),
'formats': (np.float, np.string, np.float, np.float, np.float)},
delimiter= ' ', skiprows=1)