python pandas.Series.isin,不区分大小写

时间:2017-08-14 17:55:45

标签: python pandas series

我想过滤掉一些DataFrame列中的行,这些列的数据位于列表中。

df[df['column'].isin(mylist)]

但我发现它区分大小写。 是否有任何方法使用“.isin()”不区分大小写?

4 个答案:

答案 0 :(得分:12)

一种方法是将系列的大写或小写与列表

相同
df[df['column'].str.lower().isin([x.lower() for x in mylist])]

这里的优点是我们不会保存对原始df或列表的任何更改,从而提高操作效率

考虑这个虚拟df:

    Color   Val
0   Green   1
1   Green   1
2   Red     2
3   Red     2
4   Blue    3
5   Blue    3

列表l:

l = ['green', 'BLUE']

您可以使用isin()

df[df['Color'].str.lower().isin([x.lower() for x in l])]

你得到了

    Color   Val
0   Green   1
1   Green   1
4   Blue    3
5   Blue    3

答案 1 :(得分:2)

我更喜欢使用通用.apply

myset = set([s.lower() for s in mylist])
df[df['column'].apply(lambda v: v.lower() in myset)]

set中的查找速度比list

中的查找速度快

答案 2 :(得分:1)

使用str方法将其转换为str并获取小写版本

In [23]: df =pd.DataFrame([['A', 'B', 'C'], ['D', 'E', 6]], columns=['A', 'B', '
    ...: C'])

In [24]: df
Out[24]: 
   A  B  C
0  A  B  C
1  D  E  6

In [25]: df.A
Out[25]: 
0    A
1    D
Name: A, dtype: object

In [26]: df.A.str.lower().isin(['a', 'b', 'c'])
Out[26]: 
0     True
1    False
Name: A, dtype: bool

答案 3 :(得分:0)

我将列表放入CSV并将其作为数据框加载。之后,我将运行命令:

df_done = df[df["Server Name"].str.lower().isin(df_compare["Computer Name"].str.lower())]

这避免了使用for循环,并且可以轻松处理大量数据。

df = 5000 rows
df_compare = 1000 rows