如何获得第一列,然后添加另一个切片?
例如:
import pandas as pd
df = pd.DataFrame(pd.np.random.rand(6,6), columns = list('abcdef'))
a b c d e f
0 0.147163 0.710360 0.069732 0.180949 0.694066 0.639505
1 0.771643 0.094805 0.371702 0.177538 0.089168 0.420331
2 0.431394 0.790537 0.378049 0.402930 0.350409 0.827950
3 0.421411 0.451595 0.703630 0.469526 0.612122 0.076728
4 0.854117 0.302925 0.664647 0.664098 0.959504 0.637122
5 0.659791 0.525526 0.007151 0.448761 0.738571 0.349142
我正在尝试获取列a
和c
之后的所有列。
这给了我c,d,e,f
列:
df.loc[:'a', 'c':]
这根本不起作用:
df.loc['a':'a', 'c':]
我做了几次尝试,但它们只是随机猜测,我真的无法在线找到解决方案。
注意:我正在处理一个巨大的真实数据框,因此写像df.loc[:,['a','c','d','e','f]]
答案 0 :(得分:5)
我理解的问题是如何通过列名进行选择。
不容易,因为首先需要使用Index.get_loc
的职位,然后通过numpy.r_
进行选择将其传递给DataFrame.iloc
:
a = df.columns.get_loc('a')
b = df.columns.get_loc('c')
c = len(df.columns)
df = df.iloc[:, np.r_[a, b:c]]
print (df)
a c d e f
0 0.210653 0.218035 0.845753 0.456271 0.279802
1 0.932892 0.909715 0.043418 0.707115 0.483889
2 0.444221 0.040683 0.332754 0.947120 0.617660
3 0.368875 0.206132 0.165066 0.361817 0.863353
4 0.509402 0.950252 0.815966 0.322974 0.972098
5 0.987351 0.655923 0.405653 0.257348 0.082653
答案 1 :(得分:4)
我们可以做np.r_
df.iloc[:,np.r_[0,2:df.shape[1]]]
Out[99]:
a c d e f
0 0.147163 0.069732 0.180949 0.694066 0.639505
1 0.771643 0.371702 0.177538 0.089168 0.420331
2 0.431394 0.378049 0.402930 0.350409 0.827950
3 0.421411 0.703630 0.469526 0.612122 0.076728
4 0.854117 0.664647 0.664098 0.959504 0.637122
5 0.659791 0.007151 0.448761 0.738571 0.349142
要获得职位get_indexer
df.columns.get_indexer(['c'])
Out[100]: array([2], dtype=int64)
def drop_from_here_to_there(df, here, there):
n, m = df.shape
i, j = df.columns.get_indexer([here, there])
k = np.r_[0:i+1, j:m]
return df.iloc[:, k]
drop_from_here_to_there(df, 'a', 'c')
a c d e f
0 0.147163 0.069732 0.180949 0.694066 0.639505
1 0.771643 0.371702 0.177538 0.089168 0.420331
2 0.431394 0.378049 0.402930 0.350409 0.827950
3 0.421411 0.703630 0.469526 0.612122 0.076728
4 0.854117 0.664647 0.664098 0.959504 0.637122
5 0.659791 0.007151 0.448761 0.738571 0.349142
答案 2 :(得分:2)
drop
df.drop('b', axis=1)
a c d e f
0 0.147163 0.069732 0.180949 0.694066 0.639505
1 0.771643 0.371702 0.177538 0.089168 0.420331
2 0.431394 0.378049 0.402930 0.350409 0.827950
3 0.421411 0.703630 0.469526 0.612122 0.076728
4 0.854117 0.664647 0.664098 0.959504 0.637122
5 0.659791 0.007151 0.448761 0.738571 0.349142
答案 3 :(得分:0)
您可以使用带有列名列表的调用数据框来获取所需的数据框。首先,我们将获取所有列的列表,然后在列列表上使用切片,将切片的列馈入数据框。
df.columns.to_list()
['a', 'b', 'c', 'd', 'e', 'f']
切片
cols = df.columns.to_list()
cols = cols[:1] + cols[2:]
cols
['a', 'c', 'd', 'e', 'f']
用cols呼叫df
df[cols]
a c d e f
0 0.749754 0.291974 0.638897 0.768337 0.255553
1 0.541221 0.816086 0.472628 0.276530 0.946075
2 0.811953 0.692716 0.729467 0.512503 0.589812
3 0.613418 0.588730 0.497962 0.122666 0.153101
4 0.600428 0.897041 0.643585 0.382276 0.164303
5 0.165782 0.107455 0.149544 0.309294 0.544864