2016-06-02 13 views
1

Ich habe eine kleine Testdaten Beispiel:Wählen Zeilen unter der Bedingung Pandas Python zufällig basierend

import pandas as pd 

df = {'ID': ['H900','H901','H902','','M1435','M149','M157','','M699','M920','','M789','M617','M991','H903','M730','M191'], 
    'Clone': [0,1,2,2,2,2,2,2,3,3,3,4,4,4,5,5,6], 
    'Length': [48,42 ,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48]} 

df = pd.DataFrame(df) 

es sieht aus wie:

df 
Out[4]: 
     Clone ID Length 
0  0 H900  48 
1  1 H901  42 
2  2 H902  48 
3  2    48 
4  2 M1435  48 
5  2 M149  48 
6  2 M157  48 
7  2    48 
8  3 M699  48 
9  3 M920  48 
10  3    48 
11  4 M789  48 
12  4 M617  48 
13  4 M991  48 
14  5 H903  48 
15  5 M730  48 
16  6 M191  48 

ich ein einfaches Skript, auswählen möchten zum Beispiel 5 Zeilen, die nach dem Zufallsprinzip ausgegeben werden, aber nur die Zeilen, die eine ID enthalten, sollten keine Zeile enthalten, die keine ID enthält.

mein Skript:

import pandas as pd 
import numpy as np 

df = {'ID': ['H900','H901','H902','','M1435','M149','M157','','M699','M920','','M789','M617','M991','H903','M730','M191'], 
    'Clone': [0,1,2,2,2,2,2,2,3,3,3,4,4,4,5,5,6], 
    'Length': [48,42 ,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48]} 

df = pd.DataFrame(df) 

rows = np.random.choice(df.index.values, 5) 
sampled_df = df.ix[rows] 

sampled_df.to_csv('sampled_df.txt', sep = '\t', index=False) 

aber dieses Skript manchmal die Zeilen auszuwählen, die keine ID enthält

Antwort

3

Ich glaube, Sie leer ID mit boolean indexing filtern müssen:

import pandas as pd 
import numpy as np 

df = {'ID': ['H900','H901','H902','','M1435','M149','M157','','M699','M920','','M789','M617','M991','H903','M730','M191'], 
    'Clone': [0,1,2,2,2,2,2,2,3,3,3,4,4,4,5,5,6], 
    'Length': [48,42 ,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48]} 

df = pd.DataFrame(df) 
print (df) 
df = df[df.ID != ''] 

rows = np.random.choice(df.index.values, 5) 
sampled_df = df.ix[rows] 
print (sampled_df) 
Verwandte Themen