【发布时间】:2018-01-22 15:09:30
【问题描述】:
我想用 DataFrame 的列之一过滤掉一些数据在列表中的行。
df[df['column'].isin(mylist)]
但我发现它区分大小写。 有没有不区分大小写的使用“.isin()”的方法?
【问题讨论】:
我想用 DataFrame 的列之一过滤掉一些数据在列表中的行。
df[df['column'].isin(mylist)]
但我发现它区分大小写。 有没有不区分大小写的使用“.isin()”的方法?
【问题讨论】:
一种方法是将系列的小写或大写与列表的大小写进行比较
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
【讨论】:
.isin(map(str.lower, mylist))
我更喜欢用通用的.apply
myset = set([s.lower() for s in mylist])
df[df['column'].apply(lambda v: v.lower() in myset)]
在set 中查找比在list 中查找要快
【讨论】:
使用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
【讨论】:
我会将我的列表放入 CSV 并将其加载为数据框。之后我会运行命令:
df_done = df[df["Server Name"].str.lower().isin(df_compare["Computer Name"].str.lower())]
这样可以避免使用for循环,可以轻松处理大量数据。
df = 5000 rows
df_compare = 1000 rows
【讨论】: