从数据框中随机选择列

问题描述:

我的问题很简单: 有没有任何方法可以从Pandas的数据框中随机选择列?要清楚,我想随机挑选n附带的值。我知道有对随机挑选的行这样的方法:从数据框中随机选择列

import pandas as pd 

df = pd.read_csv(filename, sep=',', nrows=None) 
a = df.sample(n = 2) 

所以现在的问题是,是否存在寻找随机列等效的方法?

sample也接受轴参数:

df = pd.DataFrame(np.random.randint(1, 10, (10, 5)), columns=list('abcde')) 

df 
Out: 
    a b c d e 
0 4 5 9 8 3 
1 7 2 2 8 7 
2 1 5 7 9 2 
3 3 3 5 2 4 
4 8 4 9 8 6 
5 6 5 7 3 4 
6 6 3 6 4 4 
7 9 4 7 7 3 
8 4 4 8 7 6 
9 5 6 7 6 9 

df.sample(2, axis=1) 
Out: 
    a d 
0 4 8 
1 7 8 
2 1 9 
3 3 2 
4 8 8 
5 6 3 
6 6 4 
7 9 7 
8 4 7 
9 5 6 
+1

这是正确的规范答案,我最初只是随机抽取列名称来读取问题。 +1 – EdChum

+0

非常感谢!这是完美的,就像上面的答案一样。猜猜我有一些工作要理解api中的所有参数。再次感谢您的回答! – ewolsen

+2

@ewolsen你应该接受这个答案,因为它是正确的答案,这也将标记问题为答案。答案 – EdChum

你可以做df.columns.to_series.sample(n=2)

以随机抽样的列,首先你需要通过调用to_series转换为Series,那么你可以调用sample像以前

In[24]: 
df.columns.to_series().sample(2) 

Out[24]: 
C C 
A A 
dtype: object 

例子:

In[30]: 
df = pd.DataFrame(np.random.randn(5,3), columns=list('abc')) 
df 

Out[30]: 
      a   b   c 
0 -0.691534 0.889799 1.137438 
1 -0.949422 0.799294 1.360521 
2 0.974746 -1.231078 0.812712 
3 1.043434 0.982587 0.352927 
4 0.462011 -0.591438 -0.214508 

In[31]: 
df[df.columns.to_series().sample(2)] 

Out[31]: 
      b   a 
0 0.889799 -0.691534 
1 0.799294 -0.949422 
2 -1.231078 0.974746 
3 0.982587 1.043434 
4 -0.591438 0.462011 
+1

这很聪明! – MaxU

+0

这绝对完美!非常感谢! – ewolsen