如何在python中基于列值比较过滤Pandas数据帧?

2024-05-16 11:49:05 发布

您现在位置:Python中文网/ 问答频道 /正文

如果您有这样一个Pandas数据帧,则按此方式过滤:

df = pd.DataFrame({'name1': ['apple','pear','applepie','APPLE'],
                'name2': ['APPLE','PEAR','apple','APPLE']
            })
df[df['name1'] != df['name2']] # works

但是,当您要比较列的上限值时,如何过滤行呢?在

^{pr2}$

Tags: 数据appledataframepandasdf方式pdpear
3条回答

您需要使用^{},因为df['name1']是一系列字符串,因此我们使用^{}字符串访问器进行矢量化字符串操作。在

df[df['name1'].str.upper() != df['name2'].str.upper()]

输出:

^{pr2}$

对于ASCII码,请检查上面的:)

正如观察到的那样,在@Veedrac的this very good answer之后,如果您想比较许多语言中的许多行不区分大小写,那么您可能需要先normalize和{}的值

df.col.str.normalize('NFKD').transform(str.casefold)

示例

^{pr2}$

以及

df.t.str.lower().duplicated()
0    False
1    False
2     True
3    False
4    False
5     True
6    False
7    False

但是

df.t.str.normalize('NFKD').transform(str.casefold).duplicated(keep=False)

0     True
1    False
2     True
3     True
4     True
5     True
6     True
7     True

在处理pandas中的字符串时,通常使用列表理解会更快一些。在

pd.DataFrame(
    [[i, j] for i, j in zip(df.name1, df.name2) if i.upper() != j.upper()],
    columns=df.columns
)

      name1  name2
0  applepie  apple

一些时间安排:

^{pr2}$

相关问题 更多 >