DataFrame索引与列名操作
学习目标
-
知道如何查看索引及列名
-
知道如何修改索引及列名
1 数据准备
我们继续使用链家租房数据来学习本章节的API,导包并读取数据
import pandas as pd # 加载数据集 df = pd.read_csv('../data/LJdata.csv') # 获取天通苑租房区域的所有数据, 返回df对象 df2 = df[df['区域'] == '天通苑租房'] print(df2.head()) # 获取df2中的价格列, 返回s对象 df2_price = df2['价格'] print(df2_price.head()) # 输出结果如下 区域 地址 户型 面积 价格 朝向 更新时间 看房人数 3 天通苑租房 天通苑北一区 2室1厅 103 5300 东南 2017.07.25 30 35 天通苑租房 天通苑本四区 1室1厅 65 4200 南 北 2017.07.26 31 78 天通苑租房 天通苑东二区 2室1厅 91 4500 南 北 2017.07.26 20 148 天通苑租房 天通苑本六区 2室1厅 114 5500 南 北 2017.07.23 33 189 天通苑租房 天通苑东三区 2室1厅 109 5000 南 北 2017.07.25 4 3 5300 35 4200 78 4500 148 5500 189 5000 Name: 价格, dtype: int64
2 获取索引和列名
2.1 获取索引
# 查看df2的索引 print(df2.index) # 查看s对象的索引 print(df2_price.index) # print(df2_price.keys()) # 使用索引下标获取具体的某一个索引值 print(df2.index[0]) print(df2_price.index[0]) # 输出结果如下 Int64Index([ 3, 35, 78, 148, 189, 295, 351, 387, 390, 458, 463, 557, 687, 763, 934, 957, 1055, 1069, 1075, 1089, 1097, 1327, 1372, 1374, 1400, 1402, 1410, 1608, 1632, 1904, 1905, 1919, 1933, 1996, 2121, 2141, 2468, 2663, 2749], dtype='int64') Int64Index([ 3, 35, 78, 148, 189, 295, 351, 387, 390, 458, 463, 557, 687, 763, 934, 957, 1055, 1069, 1075, 1089, 1097, 1327, 1372, 1374, 1400, 1402, 1410, 1608, 1632, 1904, 1905, 1919, 1933, 1996, 2121, 2141, 2468, 2663, 2749], dtype='int64') 3 3
2.2 获取列名
-
除了查看索引的API以外,还有查看df中所有列名的API
print(df2.columns) # 获取所有列的名字,存入Index对象 print(list(df2.columns)) # 获取所有列的名字 ,并转为普通列表 print(df2.keys()) # 获取所有列的名字 ,作用和columns一样 # 输出结果如下 Index(['区域', '地址', '户型', '面积', '价格', '朝向', '更新时间', '看房人数'], dtype='object')
3 索引和列名的修改方法
指定某列为索引
使用set_index函数
# 指定区域列作为索引 df3 = df2.set_index(keys=['区域']) print(df3.head()) # 输出结果如下 地址 户型 面积 价格 朝向 更新时间 看房人数 区域 天通苑租房 天通苑北一区 2室1厅 103 5300 东南 2017.07.25 30 天通苑租房 天通苑本四区 1室1厅 65 4200 南 北 2017.07.26 31 天通苑租房 天通苑东二区 2室1厅 91 4500 南 北 2017.07.26 20 天通苑租房 天通苑本六区 2室1厅 114 5500 南 北 2017.07.23 33 天通苑租房 天通苑东三区 2室1厅 109 5000 南 北 2017.07.25 4
3.1.2 读取数据时指定索引列
# 使用index_col参数指定索引列 df4 = pd.read_csv('../data/LJdata.csv', index_col=['区域']) print(df4.head()) # 输出结果如下 地址 户型 面积 价格 朝向 更新时间 看房人数 区域 燕莎租房 新源街 2室1厅 50 5800 南 2017.07.21 26 望京租房 澳洲康都 2室1厅 79 7800 东 2017.07.23 33 广安门租房 远见名苑 2室1厅 86 8000 东 2017.07.20 34 天通苑租房 天通苑北一区 2室1厅 103 5300 东南 2017.07.25 30 团结湖租房 团结湖北口 2室1厅 63 6400 南 2017.07.26 30
3.2 使用reset_index函数重置索引
-
Dataframe对象和Series对象使用reset_index函数一样,都返回使用默认自增索引的df
print(df4.reset_index()) # 重置索引之后,索引就使用 0 1 2 3 print(df2_price.reset_index().head()) # s.reset_index() # 输出结果如下 区域 地址 户型 面积 价格 朝向 更新时间 看房人数 0 燕莎租房 新源街 2室1厅 50 5800 南 2017.07.21 26 1 望京租房 澳洲康都 2室1厅 79 7800 东 2017.07.23 33 2 广安门租房 远见名苑 2室1厅 86 8000 东 2017.07.20 34 3 天通苑租房 天通苑北一区 2室1厅 103 5300 东南 2017.07.25 30 4 团结湖租房 团结湖北口 2室1厅 63 6400 南 2017.07.26 30 ... ... ... ... ... ... ... ... ... 2755 朝青租房 天鹅湾北区 1室1厅 50 9500 南 2017.07.27 13 2756 太阳宫租房 水星园 1室1厅 68 9500 北 2017.07.24 14 2757 六里桥租房 莲花小区 2室1厅 84 7200 西南 2017.07.26 7 2758 陶然亭租房 中海紫御公馆 2室2厅 91 12000 南 2017.07.26 6 2759 三元桥租房 曙光里 2室1厅 62 6200 南 2017.07.25 19 [2760 rows x 8 columns] index 价格 0 3 5300 1 35 4200 2 78 4500 3 148 5500 4 189 5000
-
使用
drop=True
参数将不保留原索引
df4 = pd.read_csv('../data/LJdata.csv', index_col=['区域']) print(df4.reset_index(drop=True)) # 将原来的索引列删除(将区域列删除) print(df2_price.reset_index(drop=True).head()) # 输出结果如下 地址 户型 面积 价格 朝向 更新时间 看房人数 0 新源街 2室1厅 50 5800 南 2017.07.21 26 1 澳洲康都 2室1厅 79 7800 东 2017.07.23 33 2 远见名苑 2室1厅 86 8000 东 2017.07.20 34 3 天通苑北一区 2室1厅 103 5300 东南 2017.07.25 30 4 团结湖北口 2室1厅 63 6400 南 2017.07.26 30 ... ... ... ... ... ... ... ... 2755 天鹅湾北区 1室1厅 50 9500 南 2017.07.27 13 2756 水星园 1室1厅 68 9500 北 2017.07.24 14 2757 莲花小区 2室1厅 84 7200 西南 2017.07.26 7 2758 中海紫御公馆 2室2厅 91 12000 南 2017.07.26 6 2759 曙光里 2室1厅 62 6200 南 2017.07.25 19 [2760 rows x 7 columns] 0 5300 1 4200 2 4500 3 5500 4 5000 Name: 价格, dtype: int64
3.3 赋值修改索引和列名
3.3.1 赋值修改索引
-
df.index
不光可以查看索引, 还可以修改索引
df5 = df2_price.reset_index().head() # 一旦重置索引,则索引就会转为 0 1 2,原来的索引列变为普通列 # 赋值修改索引 df5.index = ['a', 'b', 'c', 'd', 'e'] print(df5) # 输出结果如下 index 价格 a 3 5300 b 35 4200 c 78 4500 d 148 5500 e 189 5000
3.3.2 赋值修改列名
-
df.columns
不光可以查看列名,还可以修改列名# 赋值修改列名 df5.columns = ['列名1', '列名2'] print(df5) # 输出结果如下 列名1 列名2 a 3 5300 b 35 4200 c 78 4500 d 148 5500 e 189 5000
3.4 rename函数修改索引和列名
通过
df5.rename(index=, columns=, inplace=)
方法修改索引和列名index: 接收字典, {原索引名:新索引名}
columns: 接收字典, {原列名:新列名}
inplace:
True
或False
, 是否在原数据上删除, 默认False
3.4.1 修改索引
-
使用参数
index={'原索引名': '新索引名', ...}
修改想要修改的部分或全部索引
print(df5.rename(index={'a': 'A', 'e': 'E'})) # print(df5) # 还是修改前的df # 输出结果如下 列名1 列名2 A 3 5300 b 35 4200 c 78 4500 d 148 5500 E 189 5000
3.4.2 修改列名
-
使用参数
columns={'原列名': '新列名', ...}
修改想要修改的部分或全部列名
print(df5.rename(columns={'列名1': 'index', '列名2': '价格'})) # print(df5) # 还是修改前的df # 输出结果如下 index 价格 a 3 5300 b 35 4200 c 78 4500 d 148 5500 e 189 5000
总结
请对下列API 有印象、能找到、能理解、能看懂
-
查看或修改索引
<s/df>.index
-
查看或修改列名
df.columns=[col_name1, col_name2, ...]
-
读取数据时指定某列为索引
pd.read_csv('csv_path', index_col=[列名])
-
设置某列为df的索引
df.set_index(列名)
-
重置df的索引为默认自增索引
df.reset_index(drop=)
-
指定修改部分索引值或列名
df.rename( index={ '原索引名1': '新索引名1', '原索引名2': '新索引名2', ... }, columns={ '原列名a': '新列名a', '原列名b': '新列名b', ... } )