pandas DataFrame基础

目录

1.创建Dataframe

2.DataFrame()对象常用属性

2.1查看df的形状n*n:shape

2.2获取df列名:columns

2.3获取df索引:index

2.4获取数据类型:dtypes

2.5显示前n行:head

2.6显示后n行:tail

3.查询数据

3.1查询1列

3.2查询多列

3.3取连续的n行

3.4取n行n列

3.5通过.loc方法取值

3.5.1取连续n行

3.5.2取连续的n行n列

3.5.3取不连续的n行n列

3.5.4取某n列所有的行

3.5.5取某n行所有列

3.6通过.iloc方法取值

3.6.1取连续n行

3.6.2取连续的n行n列

3.6.3取不连续的n行n列

3.6.4取某n列所有的行

3.6.5取某n行所有列

4.索引排序sort_index()

4.1按照索引升序排序

4.2按照索引降序排序

4.3按照列索引的升序排序

4.4按照多级索引的某个级别进行排序

4.5在原DataFrame上进行排序

5.列索引排序sort_values()

5.1按照单个列的值进行升序排序

5.2按照多个列的值进行排序

5.3按照多个列排序,并重置索引

6.排名rank()

7.布尔索引

8.实用小案例,获取北京空气质量指数

9.练习


1.创建Dataframe

import numpy as np
import pandas as pd

# 通过np生成4*5二维数组,从0-20中随机取数,不包括末尾端20
arr1 = np.random.randint(0, 20, (4, 5))
print('arr1数据:', arr1)
# 1.通过二维数组进行创建df
df1 = pd.DataFrame(arr1, index=[1, 2, 3, 4], columns=list('abcde'))
print('通过二维数组进行创建df:', df1)

# 2.通过字典创建df,字典key作为列名,字典的value作为df的每列对应的值
dict1 = {
    'a': [1, 2, 3],
    'b': [3, 4, 5],
    'c': [5, 6, 7]
}
df2 = pd.DataFrame(dict1, index=list('ABC'))
print('通过字典创建df:', df2)

# 3.字典中缺少的值,在df创建中默认用空填充
dict2 = [{'one': 1, ' two': 2}, {'one': 3, ' two': 4, 'three': 5}]
df3 = pd.DataFrame(dict2)
print('字典中缺少的值,在df创建中默认用空填充:',df3)

# 4.由字典中组成的字典创建df
dict3 = {
    'Jack': {'math': 90, 'english': 89, 'art': 78},
    'Marry': {'math': 82, 'english': 95, 'art': 92},
    'Tom': {'math': 78, 'english': 67}
}
df4 = pd.DataFrame(dict3)
print('由字典中组成的字典创建df:',df4)

运行结果:

arr1数据: 
[[ 1  8  4  0 16]
 [19  8  0 16 16]
 [ 2 16 10 16 12]
 [19  0 16 16 17]]

通过二维数组进行创建df:     
    a   b   c   d   e
1   1   8   4   0  16
2  19   8   0  16  16
3   2  16  10  16  12
4  19   0  16  16  17

通过字典创建df:    
   a  b  c
A  1  3  5
B  2  4  6
C  3  5  7

字典中缺少的值,在df创建中默认用空填充:    
    one   two  three
0    1     2    NaN
1    3     4    5.0

由字典中组成的字典创建df:          
           Jack  Marry   Tom
math       90     82     78.0
english    89     95     67.0
art        78     92     NaN

适用小案例

  • 在同一个工作簿(同一个excel文件)里写入多个表格数据
import pandas as pd

dict1 = {
    'name': [' rose', 'jack', 'tom'],
    'age': [20, 30, 35],
    'city': ['cs', 'BJ', 'SH']
}
df1 = pd.DataFrame(dict1)

dict2 = {
    'product': ['A', 'B', 'c'],
    'price': [20, 30, 50],
    'quantity': [100, 200, 300]
}
df2 = pd.DataFrame(dict2)
print(df1)
print()
print(df2)

# 在同一个工作簿(同一个excel文件)里写入多个表格数据
with pd.ExcelWriter('zhangsan.xlsx',engine='openpyxl') as ex:
    # 写入到excel中的一个sheet,索引(index=True)和列名(header=True)都写入进去
    df1.to_excel(ex,sheet_name='表1',index=True,header=True)

    # 写入到excel中的一个sheet,索引(index=False)和列名(header=False)都不写入进去
    df2.to_excel(ex,sheet_name='表2',index=False,header=False)

 运行结果:

    name  age city
0   rose   20   cs
1   jack   30   BJ
2    tom   35   SH

  product  price  quantity
0       A     20       100
1       B     30       200
2       c     50       300

写入的文件:

2.DataFrame()对象常用属性

2.1查看df的形状n*n:shape

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}

df = pd.DataFrame(dict_data)
print('df原始数据:',df)

#查看df的形状n*n
print(df.shape)

运行结果:

df原始数据:    
    name  age gender
0  Jack   18      F
1   Tom   19      M
2  Mary   20      W

(3, 3)

2.2获取df列名:columns

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}

df = pd.DataFrame(dict_data)
print('df原始数据:',df)

#获取df列名
print(df.columns)

#需tolist()转成列表使用
print(df.columns.tolist())

运行结果:

df原始数据:    
    name  age gender
0  Jack   18      F
1   Tom   19      M
2  Mary   20      W

Index(['name', 'age', 'gender'], dtype='object')

['name', 'age', 'gender']

2.3获取df索引:index

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
print('df原始数据:',df)

#获取df索引
print(df.index)

#需tolist()转成列表使用
print(df.index.tolist())

运行结果:

df原始数据:    
    name  age gender
0  Jack   18      F
1   Tom   19      M
2  Mary   20      W

RangeIndex(start=0, stop=3, step=1)

[0, 1, 2]

2.4获取数据类型:dtypes

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
print('df原始数据:',df)

#获取数据类型
print(df.dtypes)

运行结果:

df原始数据:    
    name  age gender
0  Jack   18      F
1   Tom   19      M
2  Mary   20      W

name      object
age        int64
gender    object
dtype: object

2.5显示前n行:head

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
print('df原始数据:',df)

#显示前2行
print('显示前2行:',df.head(2))

运行结果:

df原始数据:    
    name  age gender
0  Jack   18      F
1   Tom   19      M
2  Mary   20      W

显示前2行:    
    name  age gender
0  Jack   18      F
1   Tom   19      M

2.6显示后n行:tail

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
print('df原始数据:',df)

print('显示后2行:',df.tail(2))

运行结果:

df原始数据:    
    name  age gender
0  Jack   18      F
1   Tom   19      M
2  Mary   20      W

显示后2行:    
    name  age gender
1   Tom   19      M
2  Mary   20      W

2.7获取所有的值:values

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
print('df原始数据:',df)

print('获取所有的值:',df.values)

运行结果:

df原始数据:    
    name  age gender
0  Jack   18      F
1   Tom   19      M
2  Mary   20      W

获取所有的值: 
[['Jack' 18 'F']
 ['Tom' 19 'M']
 ['Mary' 20 'W']]

3.查询数据

3.1查询1列

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
print('df原始数据:')
print(df)

#查询1列
print('df的name列:')
print(df['name'])

运行结果:

df原始数据:
   name  age gender
0  Jack   18      F
1   Tom   19      M
2  Mary   20      W

df的name列:
0    Jack
1     Tom
2    Mary

3.2查询多列

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
print('df原始数据:')
print(df)

# 列名用两个[[]]
print('df的name和gender列:')
print(df[['name','gender']])

运行结果:

df原始数据:
   name  age gender
0  Jack   18      F
1   Tom   19      M
2  Mary   20      W

df的name和gender列:
   name gender
0  Jack      F
1   Tom      M
2  Mary      W

3.3取连续的n行

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
print('df原始数据:')
print(df)

#[n:m]默认是取行,不包含第m行
print('取第2行和第3行:')
print(df[1:3])

运行结果:

df原始数据:
   name  age gender
0  Jack   18      F
1   Tom   19      M
2  Mary   20      W

取第2行和第3行:
   name  age gender
1   Tom   19      M
2  Mary   20      W

3.4取n行n列

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
print('df原始数据:')
print(df)

#取前2行的两列
print('取前2行的前两列:')
print(df[0:2][['name','age']])
#print(df[0:2,['name','age']]) #不能通过这种方式取n行n列
#print(df[1,1])  #不能通过这种方式取行列

运行结果:

df原始数据:
   name  age gender
0  Jack   18      F
1   Tom   19      M
2  Mary   20      W

取前2行的前两列:   
    name  age
0  Jack   18
1   Tom   19

3.5通过.loc方法取值

.loc[]是通过标签索引取值,没有标签索引时,把位置索引看成标签索引

.iloc[]是通过位置索引取值

推荐用.loc[]方式取值

3.5.1取连续n行

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
df.index=list('abc')
print('df原始数据:')
print(df)

print('取连续2行:')
print(df.loc['b':'c'])

运行结果:

df原始数据:
   name  age gender
a  Jack   18      F
b   Tom   19      M
c  Mary   20      W

取连续2行:
   name  age gender
b   Tom   19      M
c  Mary   20      W

3.5.2取连续的n行n列

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
df.index=list('abc')
print('df原始数据:')
print(df)

# 取连续的2行3列
print('取连续的2行3列:')
print(df.loc['b':'c','name':'gender'])

运行结果:

df原始数据:
   name  age gender
a  Jack   18      F
b   Tom   19      M
c  Mary   20      W

取连续的2行3列:
   name  age gender
b   Tom   19      M
c  Mary   20      W

3.5.3取不连续的n行n列

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
df.index=list('abc')
print('df原始数据:')
print(df)

# 取不连续的2行2列
print('取不连续行列,2行2列:')
print(df.loc[['a','c'],['name','gender']])

运行结果:

df原始数据:
   name  age gender
a  Jack   18      F
b   Tom   19      M
c  Mary   20      W

取不连续行列,2行2列:
   name gender
a  Jack      F
c  Mary      W

3.5.4取某n列所有的行

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
df.index=list('abc')
print('df原始数据:')
print(df)

print('取某两列所有的行:')
print(df.loc[:,['name','age']])

运行结果:

df原始数据:
   name  age gender
a  Jack   18      F
b   Tom   19      M
c  Mary   20      W

取某两列所有的行:
   name  age
a  Jack   18
b   Tom   19
c  Mary   20

3.5.5取某n行所有列

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
df.index=list('abc')
print('df原始数据:')
print(df)

print('取某一行所有列:')
print(df.loc['b',:])

运行结果:

df原始数据:
   name  age gender
a  Jack   18      F
b   Tom   19      M
c  Mary   20      W

取某一行所有列:
name      Tom
age        19
gender      M
Name: b, dtype: object

3.6通过.iloc方法取值

.iloc[]是通过位置索引取值

3.6.1取连续n行

不包括结束端

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
df.index=list('abc')
print('df原始数据:')
print(df)

print('取连续2行:')
print(df.iloc[1:3])

运行结果:

df原始数据:
   name  age gender
a  Jack   18      F
b   Tom   19      M
c  Mary   20      W

取连续2行:
   name  age gender
b   Tom   19      M
c  Mary   20      W

3.6.2取连续的n行n列

行列都不包括结束端

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
df.index=list('abc')
print('df原始数据:')
print(df)

# 取连续的2行2列
print('取连续的2行2列:')
print(df.iloc[1:3,1:3])

运行结果:

df原始数据:
   name  age gender
a  Jack   18      F
b   Tom   19      M
c  Mary   20      W

取连续的2行2列:
   age gender
b   19      M
c   20      W

3.6.3取不连续的n行n列

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
df.index=list('abc')
print('df原始数据:')
print(df)

# 取不连续的2行2列
print('取不连续行列,2行2列:')
print(df.iloc[[0,2],[0,2]])

3.6.4取某n列所有的行

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
df.index=list('abc')
print('df原始数据:')
print(df)

print('取某两列所有的行:')
print(df.iloc[:,[0,2]])

运行结果:

df原始数据:
   name  age gender
a  Jack   18      F
b   Tom   19      M
c  Mary   20      W

取某两列所有的行:
   name gender
a  Jack      F
b   Tom      M
c  Mary      W

3.6.5取某n行所有列

dict_data = {
    'name': ['Jack', 'Tom', 'Mary'],
    'age': [18, 19, 20],
    'gender': ['F', 'M', 'W']
}
df = pd.DataFrame(dict_data)
df.index=list('abc')
print('df原始数据:')
print(df)

print('取某一行所有列:')
print(df.iloc[1,:])

运行结果:

df原始数据:
   name  age gender
a  Jack   18      F
b   Tom   19      M
c  Mary   20      W

取某一行所有列:
name      Tom
age        19
gender      M
Name: b, dtype: object

4.索引排序sort_index()

4.1按照索引升序排序

"""
DataFrame.sort_index(
                    axis=0, 
                    level=None, 
                    ascending=True, 
                    inplace=False, 
                    kind='quicksort', 
                    na_position='last', 
                    sort_remaining=True, 
                    ignore_index=False
)
参数说明:
axis:可选参数,表示按照索引的哪个轴进行排序。默认值为0,表示按照行索引排序。
level:可选参数,表示按照多级索引的哪个级别进行排序。默认值为None,表示不使用多级索引。
ascending:可选参数,表示排序的顺序。默认值为True,表示按照升序排序。
inplace:可选参数,表示是否在原DataFrame上进行排序。默认值为False,表示返回一个新的排序后的DataFrame。
kind:可选参数,表示排序算法的类型。默认值为'quicksort',表示使用快速排序算法。
na_position:可选参数,表示缺失值的位置。默认值为'last',表示将缺失值放在排序的最后。
sort_remaining:可选参数,表示是否对未排序的轴进行排序。默认值为True,表示对未排序的轴进行排序。
ignore_index:可选参数,表示是否忽略排序后的索引标签。默认值为False,表示保留排序后的索引标签。
key:可调用的,可选的,如果不是 None,则在排序之前将 key 函数应用于索引值。
这类似于key内置参数sorted()函数,显著的区别在于key函数应该向量化。
它应该期待一个Index并返回一个Index相同的形状。对于 MultiIndex 输入,应用键每级.
"""

# 创建一个DataFrame示例
data = {'Name': ['John', 'Amy', 'Jason', 'Lisa'],
        'Age': [25, 30, 35, 40],
        'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']}
df = pd.DataFrame(data, index=[3, 1, 2, 4])
print('df原始数据:')
print(df)

# 默认按照索引的升序排序
sorted_df = df.sort_index(ascending=True)
print('默认按照索引的升序排序:')
print(sorted_df)

运行结果:

df原始数据:
    Name  Age         City
3   John   25     New York
1    Amy   30  Los Angeles
2  Jason   35      Chicago
4   Lisa   40      Houston

默认按照索引的升序排序:
    Name  Age         City
1    Amy   30  Los Angeles
2  Jason   35      Chicago
3   John   25     New York
4   Lisa   40      Houston

4.2按照索引降序排序

data = {'Name': ['John', 'Amy', 'Jason', 'Lisa'],
        'Age': [25, 30, 35, 40],
        'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']}
df = pd.DataFrame(data, index=[3, 1, 2, 4])
print('df原始数据:')
print(df)

# 按照索引的降序排序
sorted_df = df.sort_index(ascending=False)
print('按照索引的降序排序:')
print(sorted_df)

运行结果:

df原始数据:
    Name  Age         City
3   John   25     New York
1    Amy   30  Los Angeles
2  Jason   35      Chicago
4   Lisa   40      Houston

按照索引的降序排序:
    Name  Age         City
4   Lisa   40      Houston
3   John   25     New York
2  Jason   35      Chicago
1    Amy   30  Los Angeles

4.3按照列索引的升序排序

data = {'Name': ['John', 'Amy', 'Jason', 'Lisa'],
        'Age': [25, 30, 35, 40],
        'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']}
df = pd.DataFrame(data, index=[3, 1, 2, 4])
print('df原始数据:')
print(df)

# 按照列索引的升序排序
sorted_df = df.sort_index(axis=1, ascending=True)
print('按照列索引的升序排序:')
print(sorted_df)

运行结果:

df原始数据:
    Name  Age         City
3   John   25     New York
1    Amy   30  Los Angeles
2  Jason   35      Chicago
4   Lisa   40      Houston

按照列索引的升序排序:
   Age         City   Name
3   25     New York   John
1   30  Los Angeles    Amy
2   35      Chicago  Jason
4   40      Houston   Lisa

4.4按照多级索引的某个级别进行排序


df = pd.DataFrame(data, index=[['Group1', 'Group1', 'Group2', 'Group2'], [1, 2, 1, 2]], columns=['Name', 'Age', 'City'])
print('df原始数据:')
print(df)

# 按照多级索引的某个级别进行排序
sorted_df = df.sort_index(level=1, ascending=True)
print('按照多级索引的某个级别进行排序:')
print(sorted_df)

运行结果:

df原始数据:
           Name  Age         City
Group1 1   John   25     New York
       2    Amy   30  Los Angeles
Group2 1  Jason   35      Chicago
       2   Lisa   40      Houston

按照多级索引的某个级别进行排序:
           Name  Age         City
Group1 1   John   25     New York
Group2 1  Jason   35      Chicago
Group1 2    Amy   30  Los Angeles
Group2 2   Lisa   40      Houston

4.5在原DataFrame上进行排序

data = {'Name': ['John', 'Amy', 'Jason', 'Lisa'],
        'Age': [25, 30, 35, 40],
        'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']}
df = pd.DataFrame(data, index=[3, 1, 2, 4])
print('df原始数据:')
print(df)

# 在原DataFrame上进行排序,如果inplace=False表示不改变原df
df.sort_index(inplace=False)
print('在原DataFrame上进行排序inplace=False,原df未产生变化:')
print(df)

# 在原DataFrame上进行排序,如果inplace=True表示改变原df
df.sort_index(inplace=True)
print('在原DataFrame上进行排序:')
print(df)

运行结果:

df原始数据:
    Name  Age         City
3   John   25     New York
1    Amy   30  Los Angeles
2  Jason   35      Chicago
4   Lisa   40      Houston

在原DataFrame上进行排序inplace=False,原df未产生变化:
    Name  Age         City
3   John   25     New York
1    Amy   30  Los Angeles
2  Jason   35      Chicago
4   Lisa   40      Houston

在原DataFrame上进行排序,原df产生了变化:
    Name  Age         City
1    Amy   30  Los Angeles
2  Jason   35      Chicago
3   John   25     New York
4   Lisa   40      Houston

5.列索引排序sort_values()

inplace参数的用法和sort_index()一样

5.1按照单个列的值进行升序排序

"""
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, ignore_index=False, na_position='last')
参数说明:
by:必需参数,表示按照哪些列的值进行排序。可以是单个列名,也可以是列名组成的列表。
axis:可选参数,表示按照哪个轴进行排序。默认值为0,表示按照行进行排序。
ascending:可选参数,表示排序的顺序。默认值为True,表示按照升序排序。
inplace:可选参数,表示是否在原DataFrame上进行排序。默认值为False,表示返回一个新的排序后的DataFrame。
ignore_index:可选参数,表示是否忽略排序后的索引标签。默认值为False,表示保留排序后的索引标签。
na_position:可选参数,表示缺失值的位置。默认值为'last',表示将缺失值放在排序的最后。
"""

import pandas as pd

# 创建一个DataFrame示例
data = {'Name': ['John', 'Amy', 'Jason', 'Lisa'],
        'Age': [40, 30, 35, 26],
        'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print('df原始数据:')
print(df)

# 按照单个列的值进行升序排序
sorted_df = df.sort_values(by='Age')
print('按照单个列的值进行升序排序:')
print(sorted_df)

运行结果:

df原始数据:
    Name  Age         City
0   John   40     New York
1    Amy   30  Los Angeles
2  Jason   35      Chicago
3   Lisa   26      Houston

按照单个列的值进行升序排序:
    Name  Age         City
3   Lisa   26      Houston
1    Amy   30  Los Angeles
2  Jason   35      Chicago
0   John   40     New York

5.2按照多个列的值进行排序
 

import pandas as pd

data = {'Name': ['John', 'Amy', 'Jason', 'Lisa'],
        'Age': [40, 30, 35, 30],
        'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print('df原始数据:')
print(df)

# 按照多个列的值进行排序
sorted_df = df.sort_values(by=['Age', 'Name'], ascending=[True, False])
print('按照多个列的值进行排序:')
print(sorted_df)

运行结果:

df原始数据:
    Name  Age         City
0   John   40     New York
1    Amy   30  Los Angeles
2  Jason   35      Chicago
3   Lisa   30      Houston

按照多个列的值进行排序:
    Name  Age         City
3   Lisa   30      Houston
1    Amy   30  Los Angeles
2  Jason   35      Chicago
0   John   40     New York

5.3按照多个列排序,并重置索引

import pandas as pd

data = {'Name': ['John', 'Amy', 'Jason', 'Lisa'],
        'Age': [40, 30, 35, 30],
        'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print('df原始数据:')
print(df)

# 根据第二列降序排序,当第二列相同时,根据第一列进行升序排序,不重置索引
df.sort_values(by = ['Age','Name'],ascending=[False,True],ignore_index=False,inplace=True)
print('根据第二列降序排序,当第二列相同时,根据第一列进行升序排序,不重置索引:')
print(df)
print()
# 根据第二列降序排序,当第二列相同时,根据第一列进行升序排序,并且重置索引,替换原索引
print('根据第二列降序排序,当第二列相同时,根据第一列进行升序排序,并且重置索引,替换原索引:')
df.sort_values(by = ['Age','Name'],ascending=[False,True],ignore_index=True,inplace=True)
print(df)

运行结果:

df原始数据:
    Name  Age         City
0   John   40     New York
1    Amy   30  Los Angeles
2  Jason   35      Chicago
3   Lisa   30      Houston


根据第二列降序排序,当第二列相同时,根据第一列进行升序排序,不重置索引:
    Name  Age         City
0   John   40     New York
2  Jason   35      Chicago
1    Amy   30  Los Angeles
3   Lisa   30      Houston

根据第二列降序排序,当第二列相同时,根据第一列进行升序排序,并且重置索引,替换原索引:
    Name  Age         City
0   John   40     New York
1  Jason   35      Chicago
2    Amy   30  Los Angeles
3   Lisa   30      Houston

6.排名rank()

import pandas as pd

# 创建一个DataFrame示例
data = {'Name': ['John', 'Amy', 'Jason', 'Lisa'],
        'Score': [75, 80, 90, 80]}
df = pd.DataFrame(data)
print('df原始数据:')
print(df)
print()
# 计算在Score列中元素的排名
print('计算在Score列中元素的排名:')
rank_df = df['Score'].rank()
print(rank_df)

运行结果:

df原始数据:
    Name  Score
0   John     75
1    Amy     80
2  Jason     90
3   Lisa     80

计算在Score列中元素的排名:
0    1.0
1    2.5
2    4.0
3    2.5

7.布尔索引

import pandas as pd

df = pd.DataFrame(np.random.rand(16).reshape(4,4)*100,
                  index=['one','two','three','four'],
                  columns=['a','b','c','d'])
print('df原始数据:')
print(df)
print()
# 取a列大于60的数据
con = df['a']>60
print('条件是a>60的布尔值:',con)

print('a列大于60的数据:')
df1 = df[con]
print(df1)

运行结果:

df原始数据:
               a          b          c          d
one    88.600255   9.513174  15.192303  43.951904
two    60.720323  16.433654   3.028734  44.074688
three  23.338932   0.513912  49.412569  86.942637
four   25.701444  50.708913  90.057705  23.757693

条件是a>60的布尔值: 
one       True
two       True
three    False
four     False
Name: a, dtype: bool

a列大于60的数据:
             a          b          c          d
one  88.600255   9.513174  15.192303  43.951904
two  60.720323  16.433654   3.028734  44.074688

8.实用小案例,获取北京空气质量指数

import pandas as pd

# pd.read_html()获取网页上所有表格内容,header=0设置第一行为表头
df = pd.read_html('https://www.air-level.com/air/beijing/',header=0)[0]
print(df)

运行结果:

         监测站  AQI 空气质量等级      PM2.5       PM10  首要污染物
0     北京房山燕山   98      良   74 μg/m3  116 μg/m3  PM2.5
1      北京昌平镇   91      良   68 μg/m3  123 μg/m3  PM2.5
2      北京密云镇   79      良   58 μg/m3   98 μg/m3  PM2.5
3       北京定陵   78      良   57 μg/m3   95 μg/m3  PM2.5
4     北京密云新城   77      良   56 μg/m3  102 μg/m3   PM10
5     北京顺义新城   76      良   56 μg/m3   96 μg/m3  PM2.5
6      北京怀柔镇   75      良   55 μg/m3   96 μg/m3  PM2.5
7     北京平谷新城   75      良   55 μg/m3   93 μg/m3  PM2.5
8     北京怀柔新城   74      良   54 μg/m3   91 μg/m3  PM2.5
9     北京延庆夏都   62      良   38 μg/m3   72 μg/m3   PM10
10   北京延庆石河营   60      良   38 μg/m3   69 μg/m3   PM10
11    北京大兴旧宫  166   中度污染  126 μg/m3  168 μg/m3  PM2.5
12    北京万寿西宫  162   中度污染  123 μg/m3  169 μg/m3  PM2.5
13      北京东四  146   轻度污染  112 μg/m3  175 μg/m3  PM2.5
14      北京天坛  146   轻度污染  112 μg/m3  160 μg/m3  PM2.5
15      北京官园  141   轻度污染  108 μg/m3  166 μg/m3  PM2.5
16    北京丰台小屯  138   轻度污染  106 μg/m3  179 μg/m3  PM2.5
17     北京农展馆  127   轻度污染   97 μg/m3  151 μg/m3  PM2.5
18    北京丰台云岗  126   轻度污染   96 μg/m3  157 μg/m3  PM2.5
19    北京奥体中心  124   轻度污染   94 μg/m3  135 μg/m3  PM2.5
20    北京海淀万柳  122   轻度污染   93 μg/m3  156 μg/m3  PM2.5
21      北京古城  113   轻度污染   85 μg/m3  150 μg/m3  PM2.5
22    北京通州东关  113   轻度污染   85 μg/m3  132 μg/m3  PM2.5
23  北京门头沟三家店    -      -          -          -      -

9.练习

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.random(size=(6,4)),index=list('abcdef'),columns=['one','two','three','four'])
print('df原始数据:')
print(df)
#查询第一行第一列
print('查询第一行第一列:')
print(df.loc['a','one'])
print(df.iloc[0,0])

#查询前3行
print('查询前3行:')
print(df.head(3))
print(df.iloc[:3])

#查询后3行
print('查询后3行:')
print(df.tail(3))

#对one列进行降序排序
print('对one列进行降序排序:')
sort_df = df.sort_values(by='one',ascending=False)
print(sort_df)

#按照索引降序排列
print('按照索引降序排列:')
sort_df = df.sort_index(ascending=False)
print(sort_df)

运行结果:

df原始数据:
        one       two     three      four
a  0.909258  0.720161  0.875110  0.618486
b  0.860610  0.744329  0.193919  0.298618
c  0.976656  0.255061  0.954226  0.529841
d  0.740789  0.752703  0.022538  0.411520
e  0.176599  0.436461  0.620098  0.946948
f  0.856391  0.658529  0.729389  0.920312

查询第一行第一列:
0.9092577792355678
0.9092577792355678

查询前3行:
        one       two     three      four
a  0.909258  0.720161  0.875110  0.618486
b  0.860610  0.744329  0.193919  0.298618
c  0.976656  0.255061  0.954226  0.529841
        one       two     three      four
a  0.909258  0.720161  0.875110  0.618486
b  0.860610  0.744329  0.193919  0.298618
c  0.976656  0.255061  0.954226  0.529841

查询后3行:
        one       two     three      four
d  0.740789  0.752703  0.022538  0.411520
e  0.176599  0.436461  0.620098  0.946948
f  0.856391  0.658529  0.729389  0.920312

对one列进行降序排序:
        one       two     three      four
c  0.976656  0.255061  0.954226  0.529841
a  0.909258  0.720161  0.875110  0.618486
b  0.860610  0.744329  0.193919  0.298618
f  0.856391  0.658529  0.729389  0.920312
d  0.740789  0.752703  0.022538  0.411520
e  0.176599  0.436461  0.620098  0.946948

按照索引降序排列:
        one       two     three      four
f  0.856391  0.658529  0.729389  0.920312
e  0.176599  0.436461  0.620098  0.946948
d  0.740789  0.752703  0.022538  0.411520
c  0.976656  0.255061  0.954226  0.529841
b  0.860610  0.744329  0.193919  0.298618
a  0.909258  0.720161  0.875110  0.618486

后续持续学习更新

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值