PANDAS中DataFrame索引与列名操作

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: 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 有印象、能找到、能理解、能看懂

  • 查看或修改索引 <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',
            ...
        }
    )
  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用数据分析工具的过程Pandas DataFrame是非常强大且常用的工具。PandasDataFrame由行和列组成,行通常表示样本,列则表示特征或变量。而这些行和列都可以有自己的索引,其索引和列索引都可以用来提取DataFrame的数据。但是,在有些情况下不需要使用索引来提取数据,这时就需要去掉DataFrame的行索引和列索引,来变成一个简单的二维数组。 不要索引列名时,可以使用以下两种方法: 1.将DataFrame转换为二维ndarray数组 pandasDataFrame对象有一个values属性,可以获取DataFrame的值。这样可以将DataFrame转换为一个二维数组,去掉索引列名。 ```python import pandas as pd import numpy as np df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6], 'c': [7, 8, 9]}) print(df) arry = df.values print(arry) ``` 此时会得到以下结果: ```python a b c 0 1 4 7 1 2 5 8 2 3 6 9 [[1 4 7] [2 5 8] [3 6 9]] ``` 这里通过values属性获取了数据并把它转变为一个二维数组。 2.使用reset_index()方法 除了直接使用values属性,还可以使用reset_index()方法来去掉索引列名。因为reset_index()方法会将行索引重置为数字索引,并且在返回DataFrame对象之前删除列索引。这样就能去掉索引列名。 ```python import pandas as pd import numpy as np df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6], 'c': [7, 8, 9]}) print(df) df = df.reset_index(drop=True) print(df) ``` 此时会得到以下结果: ```python a b c 0 1 4 7 1 2 5 8 2 3 6 9 a b c 0 1 4 7 1 2 5 8 2 3 6 9 ``` 可以看到,通过reset_index()方法,行索引重置为数字索引,并且删除了原来的列索引。 总结: 去掉DataFrame索引列名可以使用以上两种方式,其转化为二维ndarray数组的方式更加简单,但需要注意DataFrame各列的数据类型和值的数量要一致。如果要保留行索引和或列名,可以使用没有参数的reset_index()方法。这些方法使得DataFrame可以在适用于矩阵的算法使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值