python –Datatframe 索引与列名操作

作者 : admin 本文共5140个字,预计阅读时间需要13分钟 发布时间: 2024-06-9 共3人阅读

学习目标

  • 知道如何查看索引及列名

  • 知道如何修改索引及列名

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: TrueFalse, 是否在原数据上删除, 默认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 有印象、能找到、能理解、能看懂

  • 查看或修改索引 .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',
            ...
        }
    )
本站无任何商业行为
个人在线分享 » python –Datatframe 索引与列名操作
E-->