不是官方答案......但它最近已经让我的生活变得更简单:
https://github.com/toobaz/generic_utils/blob/master/generic_utils/pandas/where.py
您不需要下载整个存储库:保存文件并执行
from where import Where as W
应该足够了。然后你像这样使用它:
df = pd.DataFrame([[1, 2, True],
[3, 4, False],
[5, 7, True]],
index=range(3), columns=['a', 'b', 'c'])
# On specific column:
print(df.loc[W['a'] > 2])
print(df.loc[-W['a'] == W['b']])
print(df.loc[~W['c']])
# On entire DataFrame:
print(df.loc[W.sum(axis=1) > 3])
print(df.loc[W[['a', 'b']].diff(axis=1)['b'] > 1])
一个稍微不那么愚蠢的用法示例:
data = pd.read_csv('ugly_db.csv').loc[~(W == '$null$').any(axis=1)]
EDIT: 这个答案提到了一种不需要外部组件的类似方法,结果是:
data = (pd.read_csv('ugly_db.csv')
.loc[lambda df : ~(df == '$null$').any(axis=1)])
另一种可能性是使用.apply()
, as in
data = (pd.read_csv('ugly_db.csv')
.pipe(lambda df : ~(df == '$null$').any(axis=1)))