想要替换 Pandas DataFrame 中的列值,怎么做?

关注者
3
被浏览
113,349
登录后你可以
不限量看优质回答 私信答主深度交流 精彩内容一键收藏

在 Pandas DataFrame 中替换列值的方式有很多种,接下来我将介绍几种常见的方法。

一、使用 map() 方法替换 Pandas 中的列值

DataFrame 的列是 Pandas 的 Series 。我们可以使用 map 方法将列中的每个值替换为另一个值。

Series.map() 语法

Series.map(arg, na_action=None)
  • 参数:
  1. arg :这个参数用于映射一个 Series 。它可以是一个集合或一个函数。
  2. 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 中使用 loc 方法替换列的值

另一种替换 Pandas DataFrame 列值的方法是 DataFrame 中的 loc() 方法, loc() 方法通过其标签访问值。

DataFrame.loc[] 语法

pandas.DataFrame.loc[condition, column_label] = new_value
  • 参数:
  1. condition :这个参数返回使条件为真的值。
  2. 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

python基础知识资料分享给大家~~~ 获取方式:

【资料免费领】| 程序员必备指南+Python学习资料,0元抱走!

三、在 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 替换。

四、使用 replace() 方法修改数值

在 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)

我们将在剩下的例子中使用下面的 DataFrame。

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)