使用pandas进行数据选择

时间:2015-07-20 16:48:10

标签: python pandas series

我有一个文件,其中分隔符(分隔符)是&#39 ;;' 。我将该文件读入pandas数据框 df 。现在,我想使用 df 列c 的条件从df中选择一些行。列c中的数据格式如下:

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

我有另一个单词 L 列表,其中包含

等值
[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('|')

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

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

我尝试将数据索引如下:

dat.iloc[:][0]

但是,它给出了整个系列而不仅仅是第一个元素。

任何帮助都将不胜感激。

提前谢谢

1 个答案:

答案 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