Pul*_*Jha 64 python replace dataframe pandas
我有一个pandas数据帧df,如下图所示:
BrandName Specialty
A H
B I
ABC J
D K
AB L
Run Code Online (Sandbox Code Playgroud)
我想用A替换BrandName列中的'ABC'和'AB'.有人可以帮忙吗?
Ale*_*ley 101
最简单的方法是replace在列上使用该方法.参数是您要替换的内容列表(此处['ABC', 'AB'])以及您要替换它们的内容('A'在本例中为字符串):
>>> df['BrandName'].replace(['ABC', 'AB'], 'A')
0 A
1 B
2 A
3 D
4 A
Run Code Online (Sandbox Code Playgroud)
这将创建一系列新值,因此您需要将此新列分配给正确的列名:
df['BrandName'] = df['BrandName'].replace(['ABC', 'AB'], 'A')
Run Code Online (Sandbox Code Playgroud)
I15*_*159 29
DataFrame对象具有强大而灵活的replace方法:
DataFrame.replace(
to_replace=None,
value=None,
inplace=False,
limit=None,
regex=False,
method='pad',
axis=None)
Run Code Online (Sandbox Code Playgroud)
注意,如果需要进行更改,请inplace对replace方法使用boolean argument :
inplace:boolean,default
False如果True,就位.注意:这将修改此对象上的任何其他视图(例如,一个列形成一个DataFrame).如果是,则返回调用者True.
df['BrandName'].replace(
to_replace=['ABC', 'AB'],
value='A',
inplace=True
)
Run Code Online (Sandbox Code Playgroud)
您还可以将 a 传递dict给该pandas.replace方法:
data.replace({
'column_name': {
'value_to_replace': 'replace_value_with_this'
}
})
Run Code Online (Sandbox Code Playgroud)
这样做的好处是您可以一次替换多列中的多个值,如下所示:
data.replace({
'column_name': {
'value_to_replace': 'replace_value_with_this',
'foo': 'bar',
'spam': 'eggs'
},
'other_column_name': {
'other_value_to_replace': 'other_replace_value_with_this'
},
...
})
Run Code Online (Sandbox Code Playgroud)
此解决方案将更改现有数据帧本身:
mydf = pd.DataFrame({"BrandName":["A", "B", "ABC", "D", "AB"], "Speciality":["H", "I", "J", "K", "L"]})
mydf["BrandName"].replace(["ABC", "AB"], "A", inplace=True)
Run Code Online (Sandbox Code Playgroud)
loc函数可用于替换多个值,有关此文档的信息: loc
df.loc[df['BrandName'].isin([ABC', 'AB'])]='A'
Run Code Online (Sandbox Code Playgroud)
只是想表明两种主要方法之间没有性能差异:
\n\ndf = pd.DataFrame(np.random.randint(0,10,size=(100, 4)), columns=list(\'ABCD\'))\n\ndef loc():\n df1.loc[df1["A"] == 2] = 5\n%timeit loc\n19.9 ns \xc2\xb1 0.0873 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 10000000 loops each)\n\n\ndef replace():\n df2[\'A\'].replace(\n to_replace=2,\n value=5,\n inplace=True\n )\n%timeit replace\n19.6 ns \xc2\xb1 0.509 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 10000000 loops each)\nRun Code Online (Sandbox Code Playgroud)\n