2017-08-08 14 views
2

私の質問は簡単です: ランダムにPandasのデータフレームから列を選択する方法はありますか?明確にするために、ランダムに選択して値を添付してnカラムとしたいと思います。私はランダムに行を選ぶため、このような方法があると知っている:ランダムにデータフレームから列を選択する

import pandas as pd 

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

そこで問題は、それがランダムな列を見つけるための同等の方法は存在しないのですか?

答えて

4

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

@wolsen正解で正解なので、この回答を受け入れるべきです。 – EdChum

3

あなたはただ行うことができますdf.columns.to_series.sample(n=2)

ランダムに列をサンプリングするために、まずあなたは、あなたのようにsampleを呼び出すことができますto_seriesを呼び出すことにより、Seriesに変換する必要があり

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

関連する問題