使用 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
我有一个文件,其中分隔符(定界符)是“;” .我将该文件读入 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