使用 pandas 进行数据选择

Data selection using pandas

我有一个文件,其中分隔符(定界符)是“;” .我将该文件读入 pandas 数据帧 df。现在,我想使用 df 中的 c 列的条件 select df 中的某些行。 c列数据格式如下:

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

我有另一个单词列表 L,其中的值如

[history, geography,....]

现在,如果我在“|”上拆分 c 列中的文本,那么我想 select 来自 df 的那些行,其中第一个单词不属于 L。

因此,在这个例子中,我会 select df[0] 但不会选择 df[1],因为 L 中有历史,而科学没有。

我知道,我可以在数据框中的每个对象上编写一个 for 循环和迭代器,但我想知道我是否可以以更紧凑和高效的方式做一些事情。

例如,我们可以这样做:

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('|')

但是,我不知道如何索引'dat'。 'dat'是一个Pandas系列,如下:

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

我试过如下索引数据:

dat.iloc[:][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