Python 如何在写入列表时筛选熊猫系列

Python 如何在写入列表时筛选熊猫系列,python,pandas,Python,Pandas,对于pandas数据框中的给定列'a',我一直在尝试编写列.tolist(),并过滤掉'。。这是可行的,但看起来不太可读: exclude = tbl['A'].isin(['.']) list_of_A = tbl['A'][~exclude].tolist() list\u of_A=tbl['A'][~tbl['A'].isin(['.]])].tolist() 此外,检查一个列表的速度似乎不必要地慢,尽管str.contains('.')由于模式匹配,速度似乎会慢一些。我错过了更好

对于pandas数据框中的给定列
'a'
,我一直在尝试编写列
.tolist()
,并过滤掉
'。
。这是可行的,但看起来不太可读:

exclude   = tbl['A'].isin(['.'])
list_of_A = tbl['A'][~exclude].tolist()
list\u of_A=tbl['A'][~tbl['A'].isin(['.]])].tolist()

此外,检查一个列表的速度似乎不必要地慢,尽管
str.contains('.')
由于模式匹配,速度似乎会慢一些。我错过了更好的方法吗

更新: @jpp、@piRSquared和@Scott Boston都有很好的方法,所以归结起来就是一个测试:

>>> tbl = pd.DataFrame(np.random.randn(50000, 3), columns=list('ABC'))
>>> tbl.loc[tbl.sample(10000).index, 'A'] = '.'
>>> min(timeit.repeat("list_of_A = tbl.loc[tbl['A'].ne('.'), 'A'].tolist()", repeat=1000, number=100, globals=globals()))
0.37328900000102294
>>> min(timeit.repeat("list_of_A = tbl.A.values[tbl.A.values != '.'].tolist()", repeat=1000, number=100, globals=globals()))
0.1470019999997021
>>> min(timeit.repeat("tbl.query('A != \".\"')['A'].tolist()", repeat=1000, number=100, globals=globals()))
0.45748099999946135

发现
.loc
为我打开了一个充满可能性的世界,但要粉碎“n”获取一个过滤列列表,似乎转换为ndarray最快。

使用一个临时变量和两行代码可以使其更具可读性:

exclude   = tbl['A'].isin(['.'])
list_of_A = tbl['A'][~exclude].tolist()
有两点需要注意:

  • 链式索引是;避免,因为这是从来没有必要的
  • 仅当您与
    列表
    /
    /
    pd.Series
    进行比较时,才建议使用
    isin
    <代码>loc具有
    =
    操作员的访问者应足够
请尝试以下方法:

list_of_A = tbl.loc[~(tbl['A'] == '.'), 'A'].tolist()
正如@BradSolomon所指出的,还有一种选择:

list_of_A = tbl.loc[tbl['A'].ne('.'), 'A'].tolist()

使用列表理解

list_of_A = [x for x in df['A'] if x != '.']
可能更有效

list_of_A = [x for x in df['A'].values.tolist() if x != '.']
更快

tbl.A.values[tbl.A.values != '.'].tolist()

您可以使用
query
以提高可读性:

tbl.query('A != "."')['A'].tolist()

或者:
tbl.loc[tbl.A.ne('.'),'A'].tolist()
Related@dragon951,以下解决方案之一是否有帮助?如果是,请随意接受(勾选左侧)。so
.values
返回序列的数据数组,但是[]是否按子集数组对第一个数组进行切片?我不明白正在进行的操作。@dragon951是的。[]内部是一个布尔数组,其值等于该序列。这被称为布尔切片,它将给您留下一个与这些值不等于“”的位置重合的值数组