Pandas 使用 DataFrame.query 根据字符串长度过滤字符串数据
Posted
技术标签:
【中文标题】Pandas 使用 DataFrame.query 根据字符串长度过滤字符串数据【英文标题】:Pandas filter string data based on its string length using DataFrame.query 【发布时间】:2019-02-04 17:01:28 【问题描述】:这个问题和Python: Pandas filter string data based on its string length这个问题很相似,但是我想用pandas.DataFrame.query
。假设我们有一个pandas.DataFrame
。我喜欢使用pandas.DataFrame.query
过滤掉列A
的字符串长度不等于3的行
import pandas as pd
import numpy as np
df = pd.DataFrame('A' : ['hi', 'hello', 'day', np.nan], 'B' : [1, 2, 3, 4])
df.query('A.str.len() != 3')
但是,我收到以下错误
TypeError: unhashable type: 'numpy.ndarray'
【问题讨论】:
这个表达式对我有用,也许你的数据框的 A 列有一些特定的东西。请分享df.head()
的输出
@HaleemurAli 我已经修改了代码,你可以在那里使用示例。
【参考方案1】:
用"3"
替换3
有效。我正在使用pandas 0.23.1
。
df.query('A.str.len() != "3"')
输出:
A B
0 hi 1
1 hello 2
3 NaN 4
或者,如果您想将 np.nan
作为 3 个字符的字符串 (NaN
) 删除:
df.query('A.astype("str").str.len() != "3"')
输出:
A B
0 hi 1
1 hello 2
希望这会有所帮助。
【讨论】:
这正是我想要的。谢谢。以上是关于Pandas 使用 DataFrame.query 根据字符串长度过滤字符串数据的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 DataFrame.query() 来判断列是否存在?