2015-07-20 113 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