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)
# print(df2.keys())
# 输出结果如下
Index(['区域', '地址', '户型', '面积', '价格', '朝向', '更新时间', '看房人数'], dtype='object')
3 索引和列名的修改方法
3.1 指定某列为索引
3.1.1 使用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())
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
参数将不保留原索引
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()
# 赋值修改索引
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', ... } )