Pandas dataframe 列值不区分大小写替换 <condition>
Pandas dataframe column value case insensitive replace where <condition>
pandas.DataFrame.replace 有不区分大小写的版本吗? https://pandas.pydata.org/pandas-docs/version/0.21/generated/pandas.DataFrame.replace.html
我需要根据 "where label == a or label == b or label == c".
形式的不区分大小写的条件替换列中的字符串值
我认为需要转换为 lower
and then replace by condition with isin
:
d = {'a':['test', 'Test', 'cat', 'CAT', 'dog', 'Cat']}
df = pd.DataFrame(data=d)
m = df['a'].str.lower().isin(['cat','test'])
df.loc[m, 'a'] = 'baby'
print (df)
a
0 baby
1 baby
2 baby
3 baby
4 dog
5 baby
另一个解决方案:
df['b'] = df['a'].str.replace('test', 'baby', flags=re.I)
print (df)
a b
0 test baby
1 Test baby
2 cat cat
3 CAT CAT
4 dog dog
5 Cat Cat
其他一些答案的问题在于它们不适用于所有 Dataframes,仅适用于 Series 或可以隐式转换为 Series 的 Dataframes。我理解这是因为 .str
构造存在于系列 class 中,但不存在于数据帧 class 中。
要使用 Dataframes,您可以使用 (?i)
扩展使正则表达式不区分大小写。我不相信这在所有类型的 RegEx 中都可用,但它适用于 Pandas.
d = {'a':['test', 'Test', 'cat'], 'b':['CAT', 'dog', 'Cat']}
df = pd.DataFrame(data=d)
a b
0 test CAT
1 Test dog
2 cat Cat
然后像往常一样使用替换,但使用 (?i)
扩展名:
df.replace('(?i)cat', 'MONKEY', regex=True)
a b
0 test MONKEY
1 Test dog
2 MONKEY MONKEY
pandas.DataFrame.replace 有不区分大小写的版本吗? https://pandas.pydata.org/pandas-docs/version/0.21/generated/pandas.DataFrame.replace.html
我需要根据 "where label == a or label == b or label == c".
形式的不区分大小写的条件替换列中的字符串值我认为需要转换为 lower
and then replace by condition with isin
:
d = {'a':['test', 'Test', 'cat', 'CAT', 'dog', 'Cat']}
df = pd.DataFrame(data=d)
m = df['a'].str.lower().isin(['cat','test'])
df.loc[m, 'a'] = 'baby'
print (df)
a
0 baby
1 baby
2 baby
3 baby
4 dog
5 baby
另一个解决方案:
df['b'] = df['a'].str.replace('test', 'baby', flags=re.I)
print (df)
a b
0 test baby
1 Test baby
2 cat cat
3 CAT CAT
4 dog dog
5 Cat Cat
其他一些答案的问题在于它们不适用于所有 Dataframes,仅适用于 Series 或可以隐式转换为 Series 的 Dataframes。我理解这是因为 .str
构造存在于系列 class 中,但不存在于数据帧 class 中。
要使用 Dataframes,您可以使用 (?i)
扩展使正则表达式不区分大小写。我不相信这在所有类型的 RegEx 中都可用,但它适用于 Pandas.
d = {'a':['test', 'Test', 'cat'], 'b':['CAT', 'dog', 'Cat']}
df = pd.DataFrame(data=d)
a b
0 test CAT
1 Test dog
2 cat Cat
然后像往常一样使用替换,但使用 (?i)
扩展名:
df.replace('(?i)cat', 'MONKEY', regex=True)
a b
0 test MONKEY
1 Test dog
2 MONKEY MONKEY