Pandas DataFrame 中的列值替换的几种方法## Pandas DataFrame 中的列值替换的几种方法
- 使用 map() 方法替换 Pandas 中的列值
- 在 Pandas 中使用 loc 方法替换列的值
- 在 Pandas DataFrame 中用条件替换列值
- 使用 replace() 方法修改数值
DataFrame 的列是 Pandas 的 Series。我们可以使用 map 方法将列中的每个值替换为另一个值
Series.map() 语法,
Series.map(arg, na_action=None)
参数:
arg:这个参数用于映射一个 Series。它可以是一个集合或一个函数。
na_action:na_action 用于处理 NaN(非数字)值。它可以取两个值-None 或 ignore。None 是默认值,map() 将把映射应用于所有值,包括 Nan 值;ignore 将 NaN 值留在列中,而不传递给映射方法。
它返回一个具有相同索引的 Series。
现在让我们举个例子来实现 map 方法。我们将在下面的例子中使用相同的 DataFrame
import pandas as pd
import numpy as np
data = {'name':['michael','louis','jack','jasmine'],
'city':['berlin','paris','roma',np.nan]}
df = pd.DataFrame(data,columns=['name','city'])
print(df)
name city
0 michael berlin
1 louis paris
2 jack roma
3 jasmine NaN
在 Pandas DataFrame 中用集合替换列值
教程列表
技巧贴士
函数参考
Python Pandas Howtos
如何将 Pandas DataFrame 列标题获取为列表
如何删除 Pandas DataFrame 列
如何在 Pandas 中将 DataFrame 列转换为日期时间
如何在 Pandas DataFrame 中将浮点数转换为整数
如何按一列的值对 Pandas DataFrame 进行排序
如何用 group-by 和 sum 获得 Pandas 总和
如何将 Python 字典转换为 Pandas DataFrame
如何获得 Pandas 列中元素总和
贴士文章 Python Pandas Howtos 替换 Pandas DataFrame 中的列值
替换 Pandas DataFrame 中的列值
创建时间: December-19, 2020 | 更新时间: February-28, 2021
使用 map() 方法替换 Pandas 中的列值
在 Pandas 中使用 loc 方法替换列的值
在 Pandas DataFrame 中用条件替换列值
使用 replace() 方法修改数值
在本教程文章中,我们将介绍如何在 Pandas DataFrame 中替换列值。我们将介绍三种不同的函数来轻松替换列值。
使用 map() 方法替换 Pandas 中的列值
DataFrame 的列是 Pandas 的 Series。我们可以使用 map 方法将列中的每个值替换为另一个值。
Series.map() 语法
Series.map(arg, na_action=None)
参数:
arg:这个参数用于映射一个 Series。它可以是一个集合或一个函数。
na_action:na_action 用于处理 NaN(非数字)值。它可以取两个值-None 或 ignore。None 是默认值,map() 将把映射应用于所有值,包括 Nan 值;ignore 将 NaN 值留在列中,而不传递给映射方法。
它返回一个具有相同索引的 Series。
现在让我们举个例子来实现 map 方法。我们将在下面的例子中使用相同的 DataFrame。
import pandas as pd
import numpy as np
data = {'name':['michael','louis','jack','jasmine'],
'city':['berlin','paris','roma',np.nan]}
df = pd.DataFrame(data,columns=['name','city'])
print(df)
输出:
name city
0 michael berlin
1 louis paris
2 jack roma
3 jasmine NaN
在 Pandas DataFrame 中用集合替换列值
import pandas as pd
import numpy as np
data = {'name':['michael','louis','jack','jasmine'],
'city':['berlin','paris','roma',np.nan]}
df = pd.DataFrame(data,columns=['name','city'])
// replace column values with collection
df['city'] = df['city'].map({'berlin':'dubai',
'paris':'moscow',
'roma':'milan',
np.nan:'NY'},
na_action=None)
print(df)
name city
0 michael dubai
1 louis moscow
2 jack milan
3 jasmine NY
原 DataFrame 中的 city 列值被替换为字典中的新值,作为 map() 方法的第一个参数。
在 Pandas DataFrame 中用函数替换列值
import pandas as pd
import numpy as np
data = {'name':['michael','louis','jack','jasmine'],
'city':['berlin','paris','roma',np.nan]}
df = pd.DataFrame(data,columns=['name','city'])
//replace column values with function
df['city']=df['city'].map('I am from {}'.format)
print(df)
name city
0 michael I am from berlin
1 louis I am from paris
2 jack I am from roma
3 jasmine I am from nan
na_action 默认为 None,所以原列中的 NaN 也被替换为新的字符串 I am from nan。
如果你想保留 NaN 但不被替换,可以将 na_action 设置为 ignore。
import pandas as pd
import numpy as np
data = {'name':['michael','louis','jack','jasmine'],
'city':['berlin','paris','roma',np.nan]}
df = pd.DataFrame(data,columns=['name','city'])
// replace column values excluding NaN
df['city']=df['city'].map('I am from {}'.format,
na_action = 'ignore')
print(df)
name city
0 michael I am from berlin
1 louis I am from paris
2 jack I am from roma
3 jasmine NaN
另一种替换 Pandas DataFrame 列值的方法是 DataFrame 中的 loc() 方法,loc() 方法通过其标签访问值。
DataFrame.loc[ ] 语法
pandas.DataFrame.loc[condition, column_label] = new_value
参数:
condition:这个参数返回使条件为真的值。
column_label:该参数用于指定要更新的目标列。
通过参数确定值后,我们将其更新为 new_value。
现在我们举个例子来实现 loc 方法。我们将以下面的 DataFrame 为例。
Import pandas as pd
data = {'name':['michael','louis','jack','jasmine'],
'grades':[30,70,40,80],
'result':['N/A','N/A','N/A','N/A']}
df = pd.DataFrame(data,columns=['name','grades','result'])
print(df)
name grades result
0 michael 30 N/A
1 louis 70 N/A
2 jack 40 N/A
3 jasmine 80 N/A
在 Pandas DataFrame 中用条件替换列值,使用布尔条件来指定目标元素。
Import pandas as pd
data = {'name':['michael','louis','jack','jasmine'],
'grades':[30,70,40,80],
'result':['N/A','N/A','N/A','N/A']}
df = pd.DataFrame(data,columns=['name','grades','result'])
df.loc[df.grades>50,'result']='success'
df.loc[df.grades<50,'result']='fail'
print(df)
name grades result
0 michael 30 fail
1 louis 70 success
2 jack 40 fail
3 jasmine 80 success
df.loc[df.grades>50, ‘result’]='success’如果 grades 的值大于 50,则值用 sucess 替换。
df.loc[df.grades<50,‘result’]='fail’如果 grades 值小于 50,则值用 fail 替换。
在 Pandas DataFrame 中替换列值的另一种方法是 Series.replace() 方法。
Series.replace() 语法
替换一个单一数值
df[column_name].replace([old_value], new_value)
用相同的值替换多个值
df[column_name].replace([old_value1, old_value2, old_value3], new_value)
用多个数值代替多个数值
df[column_name].replace([old_value1, old_value2, old_value3],[new_value1, new_value2, new_value3])
用整个 DataFrame 的新值替换一个值。
df.replace([old_value], new_value)
例子如:
import pandas as pd
data = {'name':['michael','louis','jack','jasmine'],
'salary':[700,800,1000,1200]}
df = pd.DataFrame(data,columns=['name','salary'])
print(df)
name salary
0 michael 700
1 louis 800
2 jack 1000
3 jasmine 1200
在 Pandas DataFrame 中用多个值替换列值
import pandas as pd
data = {'name':['michael','louis','jack','jasmine'],
'salary':[700,800,1000,1200]}
df = pd.DataFrame(data,columns=['name','salary'])
df['name']= df['name'].replace(['michael','louis'],['karl','lionel'])
print(df)
name salary
0 karl 700
1 lionel 800
2 jack 1000
3 jasmine 1200
在 Pandas DataFrame 中仅用相同的值替换列值
import pandas as pd
data = {'name':['michael','louis','jack','jasmine'],
'salary':[700,800,1000,1200]}
df = pd.DataFrame(data,columns=['name','salary'])
df['salary']= df['salary'].replace([1000,1200],1500)
print(df)
name salary
0 karl 700
1 lionel 800
2 jack 1500
3 jasmine 1500
在 Pandas DataFrame 中用一个值替换列值
import pandas as pd
data = {'name':['michael','louis','jack','jasmine'],
'salary':[700,800,1000,1200]}
df = pd.DataFrame(data,columns=['name','salary'])
df['salary']= df['salary'].replace([700],750)
print(df)
name salary
0 karl 750
1 lionel 800
2 jack 1000
3 jasmine 1200
替换整个 Pandas DataFrame 中的值
import pandas as pd
data = {'name':['michael','louis','jack','jasmine'],
'salary':[700,800,1000,1000]}
df = pd.DataFrame(data,columns=['name','salary'])
df= df.replace([1000],1400)
print(df)
name salary
0 karl 750
1 lionel 800
2 jack 1400
3 jasmine 1400