我有一个这样的dataframe:
| | 通货|显示符号|菲吉|伊辛|麦克风|shareClassFIGI|符号|类型|
| --------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
| 0|美元|广东广电网络|BBG014HVCMB9|无|XNAS公司||广东广电网络|权益WRT|
| 1|美元|DCHPF|BBG00D8RQQS7|无|OOTC|BBG001SG1ZV8|DCHPF|普通股|
| 二|美元|雷|BBG0142KKR10|无|ARCX|BBG0142KKSD5|雷|ETP|
| 三|美元|TRNIF|BBG01FZS3RZ4|无|OOTC|BBG00M1B7Y30|TRNIF|封闭式基金|
| 四|美元|POTN|BBG000BXHT20|无|OOTC|BBG001S7BTV1|POTN|普通股|
| ……|……|……|……|……|……|……|……|……|
| 28030|美元|Au|BBG000BCMDR8|无|XNYS|BBG001S5NYW0|Au|ADR|
| 28031|美元|ECCC|BBG011DWM8Z1|无|XNYS||ECCC|公众|
| 28032|美元|BZLFF|BBG000C0V028|无|OOTC|BBG001S61C32|BZLFF|普通股|
| 28033|美元|DRIV|BBG00KLHY7D7|无|XNAS公司|BBG00KLHY836|DRIV|ETP|
| 28034|美元|AHAHF|BBG00CSP14G0|无|OOTC|BBG001S9YD10|AHAHF|普通股|
我想通过多个条件选择一些行,如下所示:
dirty_data = df[
(df['description'] == '') # condition 1
| (df['description'] == 'Test') # condition 2
| (df['shareClassFIGI'] == '') # condition 3
| ...
]
这个代码安排让我能够注解出一些条件,以便轻松查看:
dirty_data = df[
(df['description'] == '')
# | (df['description'] == 'Test')
# | (df['shareClassFIGI'] == '')
| ...
]
但注解掉第一个条件会引发错误:
dirty_data = df[
# (df['description'] == '')
| (df['description'] == 'Test') # Invalid syntax! There is a `|` before the first condition
| (df['shareClassFIGI'] == '')
| ...
]
我在所有条件之前添加False
,它解决了我的问题:
dirty_data = df[
False
| (df['description'] == '') # Now I can comment out this line without errors
| (df['description'] == 'Test')
| (df['shareClassFIGI'] == '')
| ...
]
但有时我想注解掉所有的contendions来显示和检查原始 Dataframe ,但它会引发KeyError
:
dirty_data = df[
False # KeyError: False
# | (df['description'] == '')
# | (df['description'] == 'Test')
# | (df['shareClassFIGI'] == '')
# | ...
]
dirty_data = df[False]
是无效语法。
有没有一个表达式可以替代False
,以满足我的需要?
编辑:
我觉得我原来的逻辑代码是错的,没有条件就返回truthy,有条件就返回falsy,这不容易。
3条答案
按热度按时间cyvaqqii1#
恕我直言,注解不应该是代码的任何部分,所以我会尽可能避免做你所要求的事情。如果你必须用不同的条件列表来切片 Dataframe ,为什么不像这样编写一个函数呢:
然后你可以切片:
4dc9hkyq2#
虽然我同意@Quang Hoang,这里有一个如何实现你想要的选择:
len(df.index)
的True
的布尔掩码,因此它将始终选择所有数据&
而不是|
将所选内容与要应用的其他条件组合这应该可以确保,每当你删除(或注解掉)除了第一个条件之外的所有条件时,整个数据框都会被选中。
示例:
选择定义了某些条件的数据:
输出
选择除默认布尔掩码外的所有条件都已删除的数据
输出
希望这就是你一直在寻找的。
xdnvmnnf3#
我通过创建一个helper函数得到了一个想法:
为了简化代码并提高易用性,可以将该函数添加到DataFrame类中:
现在代码排列就像一个搜索栏。默认情况下显示所有数据,当有任何条件输入时显示结果。您可以打开/关闭任何条件。您可以通过在代码中添加一行来尝试任何条件,而无需编写样板代码(创建一个Jupyter Notebook单元格,再次写入
df[...]
),并通过注解将条件保留为搜索历史。以这种方式,你可以专注于条件和结果来理解数据。有什么建议吗?