使用pandas DataFrame.rename()函数重命名列
Pandas是用于数据分析的开源Python库。
它使Python能够处理类似电子表格的数据,以实现快速数据加载,操作,对齐和合并以及其他功能。
为了给Python提供这些增强的功能,Pandas向Python引入了两种新的数据类型:
Series:
代表DataFrame的单列DataFrame:代表整个电子表格或者矩形数据
Pandas DataFrame也可以看作是Series对象的字典或者集合。
安装Python pandas模块
默认情况下,Linux环境中可能未安装panda模块
ModuleNotFoundError: No module named 'pandas'
因此,我们必须首先安装此模块。
由于我正在使用RHEL 8,因此我将使用dnf
。
# dnf -y install python3-pandas.x86_64
提示:在RHEL 8环境中,我在安装python3-panda
时没有得到python3-matplotlib-3.0.3-3.el8.x86_64
错误所需的libqhull.so.7()(64bit)
。
为了克服这个问题,我们需要使用subscription-manager repos --enable" codeready-builder-for-rhel-8- {ARCH} -rpms"
来启用codeready-builderRepo。
其中将" {ARCH}"替换为体系结构值
加载数据集
给定数据集后,我们首先加载它,然后开始查看其结构和内容。
查看数据集的最简单方法是检查特定的行和列并对其进行子集化由于Pandas不属于Python标准库,因此我们必须首先告诉Python加载(导入)该库。
使用熊猫函数时,通常的做法是给熊猫起别名pd
import pandas as pd
加载库后,我们可以使用
read_csv
函数加载CSV数据文件。
要从Pandas访问read_csv
函数,我们使用点表示法。我已经为本教程创建了一个示例csv文件(
cars.csv
)(用逗号分隔),默认情况下," read_csv"函数将读取一个用逗号分隔的文件:
#!/usr/bin/env python3 import pandas as pd # Pass the filename to the dataset to read_csv # and assign the resulting DataFrame to variable df = pd.read_csv('/root/cars.csv') # Print the content of cars.csv print(df)
该脚本的输出:
# python3 /tmp/dataframe_ex.py Company Car Country State Owner 0 Mahindra XUV300 India Karnataka hynman 1 Tata Nexon India Tamil Nadu Amit 2 Hyundai Creta India New Delhi Rahul 3 Maruti Brezza India Bihar Saahil 4 Ford Ecosport India Kerela Anup
pandas.DataFrame.rename
重命名DataFrame方法接受将旧值映射到新值的字典。
我们可以使用此函数来重命名Python DataFrame中的单列或者多列
rename()方法提供一个名为inplace的参数,默认情况下为False并复制基础数据。
我们可以通过inplace = True来重命名数据。
语法:
DataFrame.rename(self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors='ignore')
除非另有说明,否则语法中提供的值为默认值。
这将返回带有重命名的轴标签的DataFrame。
"参数:""映射器:类似字典或者函数"类似字典或者函数转换以应用于该轴"值。
使用映射器和轴来指定要使用映射器或者索引和列定位的轴。
index:类似dict或者function替代指定轴(映射器,axis = 0等效于index = mapper)。
列:类似dict或者函数替代指定轴(映射器,轴= 1等效于列=映射器)。
axis:int或者str
用映射器定位的轴。
可以是轴名称("索引","列")或者数字(0、1)。
默认值为"索引"。
copy:bool,默认为True
还复制基础数据。
inplace:bool,默认为False
是否返回新的DataFrame。
如果为True,则将忽略副本的值。
level:int或者级别名称,默认值为None如果是MultiIndex,则仅重命名指定级别中的标签。
错误:{'ignore','raise'},默认为'ignore'
方法1:使用列标签
重命名单列
替换同一文件中的单列的语法为:
pandas.DataFrame.rename(columns = {'<old_value>':'<new_value>'}, inplace = True/False)
在此示例中,我们将列名" Company"重命名为" Brand"
#!/usr/bin/env python3 import pandas as pd # Pass the filename to the dataset to read_csv # and assign the resulting DataFrame to variable df = pd.read_csv('/root/cars.csv') # Rename Single Column df.rename(columns = {'Company':'Brand'}, inplace = True) # print the output print(df)
执行脚本,我们可以检查我们的列就位重命名是否成功:
# python3 /tmp/dataframe_ex.py Brand Car Country State Owner 0 Mahindra XUV300 India Karnataka hynman 1 Tata Nexon India Tamil Nadu Amit 2 Hyundai Creta India New Delhi Rahul 3 Maruti Brezza India Bihar Saahil 4 Ford Ecosport India Kerela Anup
重命名多列
要就地重命名多列,我们将使用以下语法:
pandas.DataFrame.rename(columns = {'<old_value_1>':'<new_value_1>', '<old_value_2>':'<new_value_2>'}, inplace = True/False)
我们只需要在花括号内添加<old_value>:<new_value>部分,以在多个位置替换列,在此示例中,我们将列名称Company替换为Brand,将Car替换为SUV:
#!/usr/bin/env python3 import pandas as pd # Pass the filename to the dataset to read_csv # and assign the resulting DataFrame to variable df = pd.read_csv('/root/cars.csv') # Rename Multiple Columns df.rename(columns = {'Company':'Brand', 'Car':'SUV'}, inplace = True) # print the output print(df)
该脚本的输出确认替换成功:
# python3 /tmp/dataframe_ex.py Brand SUV Country State Owner 0 Mahindra XUV300 India Karnataka hynman 1 Tata Nexon India Tamil Nadu Amit 2 Hyundai Creta India New Delhi Rahul 3 Maruti Brezza India Bihar Saahil 4 Ford Ecosport India Kerela Anup
方法2:使用轴样式
DataFrame.rename()还支持"轴样式"调用约定,在该约定中,我们指定单个映射器和要应用该映射的轴。
使用此方法的"语法"为:
pandas.DataFrame.rename({'<old_value_1>':'<new_value_1>', '<old_value_2>':'<new_value_2>'}, axis='columns', inplace = True/False)
在这个示例python脚本中,我将把""中的两个列值替换为"品牌",将"汽车"替换为" SUV"。
#!/usr/bin/env python3 import pandas as pd # Pass the filename to the dataset to read_csv # and assign the resulting DataFrame to variable df = pd.read_csv('/root/cars.csv') # Rename Multiple Columns df.rename({'Company': 'Brand', 'Car':'SUV'}, axis='columns', inplace = True) # print the output print(df)
该脚本的输出:
# python3 /tmp/dataframe_ex.py Brand SUV Country State Owner 0 Mahindra XUV300 India Karnataka hynman 1 Tata Nexon India Tamil Nadu Amit 2 Hyundai Creta India New Delhi Rahul 3 Maruti Brezza India Bihar Saahil 4 Ford Ecosport India Kerela Anup
一些更多的例子:
在此示例中,我们将使用带有rename()函数的str.upper将所有标头更改为大写字符
#!/usr/bin/env python3 import pandas as pd # Pass the filename to the dataset to read_csv # and assign the resulting DataFrame to variable df = pd.read_csv('/root/cars.csv') # Rename Multiple Columns df.rename(str.upper, axis='columns', inplace = True) # print the output print(df)
该脚本的输出:
# python3 /tmp/dataframe_ex.py COMPANY CAR COUNTRY STATE OWNER 0 Mahindra XUV300 India Karnataka hynman 1 Tata Nexon India Tamil Nadu Amit 2 Hyundai Creta India New Delhi Rahul 3 Maruti Brezza India Bihar Saahil 4 Ford Ecosport India Kerela Anup
同样,我们可以使用" str.lower"将"列标题格式"转换为小写形式。
使用具有名称的read_csv重命名列
read_csv函数中的names参数用于定义列名。
如果我们在此列表中传递额外的名称,它将使用该名称添加具有新值的另一个新列。
使用" header = 0"从输出中删除第一个标题
在这个例子中,我们定义了一个新列表" new_colums"并存储了新的列名。
确保新列表的长度与输入CSV或者列表中现有列表的长度相同
#!/usr/bin/env python3 import pandas as pd # Define new list with the new column names # The length of the new list must be same as existing column length new_columns = ['Brand', 'SUV', 'Country', 'State', 'Owner'] # Pass the filename to the dataset to read_csv # and assign the resulting DataFrame to variable df = pd.read_csv('/root/cars.csv', names = new_columns, header = 0 ) # print the output print(df)
该脚本的输出:
# python3 /tmp/dataframe_ex.py Brand SUV Country State Owner 0 Mahindra XUV300 India Karnataka hynman 1 Tata Nexon India Tamil Nadu Amit 2 Hyundai Creta India New Delhi Rahul 3 Maruti Brezza India Bihar Saahil 4 Ford Ecosport India Kerela Anup
使用tolist()重新分配列属性
tolist()用于将系列转换为列表。
可以将列属性直接重新分配给Python列表。
当列表具有与行和列标签相同数量的元素时,此分配有效。
以下代码在每个Column对象上使用
tolist
方法来创建Python标签列表。然后,它修改列表中的几个值,并将列表重新分配给columns属性:
#!/usr/bin/env python3 import pandas as pd # Pass the filename to the dataset to read_csv # and assign the resulting DataFrame to variable df = pd.read_csv('/root/cars.csv') # Store the column header and converts to list columns = df.columns column_list = columns.tolist() # Rename column labels with list assignments column_list[0] = 'Brand' column_list[1] = 'SUV' # Reassign the new column values df.columns = column_list # print the output print(df)
该脚本的输出:
# python3 /tmp/dataframe_ex.py Brand SUV Country State Owner 0 Mahindra XUV300 India Karnataka hynman 1 Tata Nexon India Tamil Nadu Amit 2 Hyundai Creta India New Delhi Rahul 3 Maruti Brezza India Bihar Saahil 4 Ford Ecosport India Kerela Anup
使用Panda DataFrame定义新的列列表
我不会将其称为重命名,而是可以定义一个新的列列表,并使用dataframe对象的columns属性替换现有的列列表。
但是,请确保新列列表的长度与我们要替换的列的长度相同。
这类似于我们在方法3中使用带有名称属性的read_csv
所做的操作
#!/usr/bin/env python3 import pandas as pd # Pass the filename to the dataset to read_csv # and assign the resulting DataFrame to variable df = pd.read_csv('/root/cars.csv') # Print the BEFORE content print(df.columns) # Rename the Column List df.columns = ['Brand', 'SUV', 'Country', 'State', 'Owner'] # Print the AFTER content print(df.columns)
该脚本的输出:
# python3 /tmp/dataframe_ex.py Index(['Company', 'Car', 'Country', 'State', 'Owner'], dtype='object') Index(['Brand', 'SUV', 'Country', 'State', 'Owner'], dtype='object')