2015-07-20 242 views
0

我有一個文件,其中分隔符(分隔符)是';' 。我將該文件讀入熊貓數據幀df。現在,我想從df中選擇一些行,使用列c中的條件df。數據的在列C中的格式如下:使用熊貓進行數據選擇

[0]science|time|boot 
[1]history|abc|red 
and so on... 

我有詞語大號,其具有這樣的值作爲

[history, geography,....] 

現在,如果我分裂在列c的文本的另一個列表在'|'上,然後我想從df中選擇那些行,其中第一個單詞不屬於L.

因此,在本例中,我將選擇df [0],但不會選擇df [1] ,因爲歷史存在於L而科學不是。我知道,我可以在數據框中的每個對象上編寫一個for循環和iter,但是我想知道我是否能夠以更緊湊和更高效的方式做某件事。

例如,我們可以這樣做:

df.loc[df['column_name'].isin(some_values)] 

我有這樣的:

df = pd.read_csv(path, sep=';', header=None, error_bad_lines=False, warn_bad_lines=False) 
dat=df.ix[:,c].str.split('|') 

但是,我不知道如何索引 '逸'。 「逸」是熊貓系列,如下:

0      [science, time, boot] 
1      [history, abc, red] 
.... 

我試圖索引DAT如下:

dat.iloc[:][0] 

但是,它給整個系列,而不是僅僅是第一要素。

任何幫助,將不勝感激。

預先感謝您

回答

0

這裏有一個辦法:

數據

df = pd.DataFrame({'c':['history|science','science|chemistry','geography|science','biology|IT'],'col2':range(4)}) 

Out[433]: 
        c col2 
0 history|science  0 
1 science|chemistry  1 
2 geography|science  2 
3   biology|IT  3 

lst = ['geography', 'biology','IT'] 

分辨率

您可以使用列表理解:

df.loc[pd.Series([not x.split('|')[0] in lst for x in df.c.tolist()])] 

Out[444]: 
        c col2 
0 history|science  0 
1 science|chemistry  1 
+0

完美,謝謝。 – user2948166