四.pandas数据处理

目录

四.pandas数据处理

1.Pandas数据计算

演示代码

1-sum()求和

2-mean()求均值

3-std()求标准差

4-max()求最大值

5-median()中位数

2.reindex重置索引

1-重置行、列标签

2-重命名标签-rename()

3-设置索引列

3.sorting排序

1.标签排序

2.列标签排序

3.按值排序

4.concat连接

1.concat连接

2.append连接


四.pandas数据处理


1.Pandas数据计算

函数名称 描述说明
count() 统计某个非空值的数量。
sum() 求和
mean() 求均值
median() 求中位数
mode() 求众数
std() 求标准差
min() 求最小值
max() 求最大值
abs() 求绝对值

-------axis=0/1

在 DataFrame 中,使用聚合类方法时需要指定轴(axis)参数。下面介绍两种传参方式:

  • 对行操作,默认使用 axis=1 或者使用 "index";------行

  • 对列操作,默认使用 axis=0 或者使用 "columns"。-----列

演示代码

复制代码
#下面操作以此代码为准:
​
import pandas as pd
​
# 创建字典型series结构
dict_data = {'Name': pd.Series(['张三', '李四', '王五', '赵六', '老赵', '小曹', '小陈',
                                '老李', '老王', '小冯', '小何', '老张']),
             'Age': pd.Series([25, 26, 25, 23, 30, 29, 23, 34, 40, 30, 51, 46]),
             'Rating': pd.Series([4.23, 3.24, 3.98, 2.56, 3.20, 4.6, 3.8, 3.78, 2.98, 4.80, 4.10, 3.65])
             }
df = pd.DataFrame(dict_data)
print(df)

1-sum()求和

axis=0 返回所有的列求和 (默认情况

axis=1返回数字类型-行-求和。

2-mean()求均值

复制代码
print(df.mean())
​
Age       31.833333
Rating     3.743333
dtype: float64

3-std()求标准差

复制代码
print(df.std())
​
Age       9.232682
Rating    0.661628
dtype: float64

4-max()求最大值

复制代码
# 每个字段的最大值
print(df.max())
​
Name       赵六
Age        51
Rating    4.8
dtype: object
   ----- 
min()--》
Name        小何
Age         23
Rating    2.56
dtype: object

5-median()中位数

复制代码
print(df.median())
​
Age       29.50
Rating     3.79
dtype: float64

。。。

2.reindex重置索引

重置索引(reindex)可以更改原 DataFrame 的行标签或列标签,并使更改后的行、列标签与 DataFrame 中的数据逐一匹配。通过重置索引操作,您可以完成对现有数据的重新排序。如果重置的索引标签在原 DataFrame 中不存在,那么该标签对应的元素值将全部填充为 NaN

1-重置行、列标签

--从老的数据里面提取新的。

复制代码
import pandas as pd
import numpy as np
df = pd.DataFrame({
    'Time': pd.date_range(start='2023-01-01', periods=20, freq='D'),
    'ID': np.linspace(0, 19, num=20),
    'Age': np.random.randint(20,25,20),
    'Name': np.random.choice(['Alice', 'Piter', 'Jick'], 20).tolist(),
})
print(df)
​
# 只获取0 2 5行,Time,Name,Age列
df_new = df.reindex(index=[0, 2, 5], columns=['Time', 'Name', 'Age'])
print(df_new)
​
-------------->
         Time    ID  Age   Name
0  2023-01-01   0.0   24  Alice
1  2023-01-02   1.0   22  Piter
2  2023-01-03   2.0   23   Jick
3  2023-01-04   3.0   22   Jick
4  2023-01-05   4.0   22  Alice
5  2023-01-06   5.0   21  Piter
6  2023-01-07   6.0   21   Jick
7  2023-01-08   7.0   20  Alice
8  2023-01-09   8.0   22   Jick
9  2023-01-10   9.0   20   Jick
10 2023-01-11  10.0   20   Jick
11 2023-01-12  11.0   22  Alice
12 2023-01-13  12.0   22  Piter
13 2023-01-14  13.0   23  Piter
14 2023-01-15  14.0   22   Jick
15 2023-01-16  15.0   23  Piter
16 2023-01-17  16.0   20  Alice
17 2023-01-18  17.0   20  Alice
18 2023-01-19  18.0   21  Piter
19 2023-01-20  19.0   22   Jick
​
        Time   Name  Age
0 2023-01-01  Alice   24
2 2023-01-03   Jick   23
5 2023-01-06  Piter   21

2-重命名标签-rename()

rename() 方法允许您使用某些映射(dict或Series)或任意函数来对行、列标签重新命名 。

--(用字典重新命名.)

复制代码
import pandas as pd
​
dict_data = {'Name': pd.Series(['张三', '李四', '王五', '赵六']),
             'Age': pd.Series([25, 26, 25, 23]),
             'height': pd.Series([114.23, 123.24, 153.98, 172.56])
             }
​
df = pd.DataFrame(dict_data)
print(df)
# 对行和列重新命名
print(df.rename(columns={'Name': '姓名', 'Age': '年龄', "height": "身高"}, index={0: 'first', 1: 'second', 2: 'third'}))
​
-------------
  Name  Age  height
0   张三   25  114.23
1   李四   26  123.24
2   王五   25  153.98
3   赵六   23  172.56
​
​
        姓名  年龄      身高
first   张三  25  114.23
second  李四  26  123.24
third   王五  25  153.98
3       赵六  23  172.56

3-设置索引列

  1. keys : 要设置为索引的列名(如有多个应放在一个列表里) (列值-->列标签)

  2. drop : 将设置为索引的列删除,默认为True 保留当前列+(列值-->列标签)

  3. append : 是否将新的索引追加到原索引后(即是否保留原索引),默认为False

  4. inplace : 是否在原DataFrame上修改,默认为False

    1.keys (值-->列标签)

复制代码
import pandas as pd
df_data = pd.DataFrame([['Alice', 'Math', 93], ['Bob', 'Physics', 98], ['Chris', 'Chemistry', 96], ['David', 'Biology', 90]],
                       columns=['Name', 'Subject', 'Score'])
print(df_data)
print('\n')
data1 = df_data.set_index(keys='Name')
print(data1)
----------------
    Name    Subject  Score
0  Alice       Math     93
1    Bob    Physics     98
2  Chris  Chemistry     96
3  David    Biology     90
​
         Subject  Score
Name                   
Alice       Math     93
Bob      Physics     98
Chris  Chemistry     96
David    Biology     90

2.drop 保留当前列,(值-->列标签)

复制代码
data1 = data.set_index(keys='Name',drop=False)
print(data1)
​
--------
    Name    Subject  Score
0  Alice       Math     93
1    Bob    Physics     98
2  Chris  Chemistry     96
3  David    Biology     90
​
​
        Name    Subject  Score
Name                          
Alice  Alice       Math     93
Bob      Bob    Physics     98
Chris  Chris  Chemistry     96
David  David    Biology     90

3.append --是否保留原索引,默认为False

复制代码
data1 = df_data.set_index(keys='Name',append=True)
print(data1)
-------------
         Subject  Score
  Name                   
0 Alice       Math     93
1 Bob      Physics     98
2 Chris  Chemistry     96
3 David    Biology     90

4.inplace : 是否在原DataFrame上修改,默认为False

复制代码
new_data = df_data.set_index(keys='Name',inplace=True)
print(df_data)
print("-------------")
print(new_data)
​
​
         Subject  Score
Name                   
Alice       Math     93
Bob      Physics     98
Chris  Chemistry     96
David    Biology     90
-------------
None

3.sorting排序

Pands 提供了两种排序方法,分别是按 标签排序 和按 数值排序 .

1.标签排序

复制代码
import pandas as pd
import numpy as np
​
# 行标签乱序排列,列标签乱序排列
df = pd.DataFrame(np.arange(1, 21).reshape(10, 2),
                  index=[1, 6, 4, 2, 3, 5, 9, 8, 0, 7],
                  columns=['first', 'second'])
​
sorted_df = df.sort_index()
print(sorted_df)
#按index排序.
​
--------
sorted_df = df.sort_index(ascending=True)
​

通过将布尔值传递给 ascending参数 ,可以控制排序的顺序(行号顺序).

----第一列从小到大(ascending=True)

----------从大到小(ascending=False)

复制代码
  first  second
0     17      18
1      1       2
2      7       8
3      9      10
4      5       6
5     11      12
6      3       4
7     19      20
8     15      16
9     13      14

2.列标签排序

通过给 axis 轴参数传递 0 或 1,可以对列标签进行排序。

---默认情况下,axis=0 表示按排序;

---而 axis=1 则表示按排序。

复制代码
import pandas as pd
import numpy as np
​
# 行标签乱序排列,列标签乱序排列
df = pd.DataFrame(np.arange(1, 21).reshape(10, 2),
                  index=[1, 6, 4, 2, 3, 5, 9, 8, 0, 7],
                  columns=['first', 'second'])
​
sorted_df = df.sort_index(axis=1)
print(sorted_df)
----------
   first  second
1      1       2
6      3       4
4      5       6
2      7       8
3      9      10
5     11      12
9     13      14
8     15      16
0     17      18
7     19      20

3.按值排序

---按第几行排序(by)

与标签排序类似,sort_values() 表示按值排序。它接受一个**by参数** ,该参数值是要排序数列的 DataFrame 列名

sort_values() 提供了参数kind

  • mergesort

  • heapsort

  • quicksort

默认为 quicksort(快速排序) ,其中 Mergesort 归并排序是最稳定的算法。

复制代码
import pandas as pd
​
df = pd.DataFrame({'col1': [2, 1, 1, 1], 'col2': [1, 3, 2, 4]})
print(df)
​
sorted_df = df.sort_values(by='col2', kind="mergesort")
print(sorted_df)

4.concat连接

Pandas 通过 concat() 函数能够轻松地将 Series 与 DataFrame 对象组合在一起 .

1.concat连接

复制代码
import pandas as pd
​
df_one = pd.DataFrame({
        'A': ['A0', 'A1', 'A2', 'A3'],
        'B': ['B0', 'B1', 'B2', 'B3'],
        'C': ['C0', 'C1', 'C2', 'C3'],
        'D': ['D0', 'D1', 'D2', 'D3']},
        index=[0, 1, 2, 3])
df_two = pd.DataFrame({                                                                                                                                                                                         
        'A': ['A4', 'A5', 'A6', 'A7'],
        'B': ['B4', 'B5', 'B6', 'B7'],
        'C': ['C4', 'C5', 'C6', 'C7'],
        'D': ['D4', 'D5', 'D6', 'D7']},
               )
print(pd.concat([df_one,df_two]))
---------------------------
​
    A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
0  A4  B4  C4  D4
1  A5  B5  C5  D5
2  A6  B6  C6  D6
3  A7  B7  C7  D7

--如果想让输出的 行索引 遵循依次递增的规则,那么需要将 ignore_index 设置为 True。

复制代码
print(pd.concat([df_one,df_two],axis="index",ignore_index=True))
-----------
    A   B   C   D
0  A0  B0  C0  D0
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
4  A4  C4  B4  D4
5  A5  C5  B5  D5
6  A6  C6  B6  D6
7  A7  C7  B7  D7

2.append连接

  • 单独链接一个Dataframe对象
复制代码
import pandas as pd
a= pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3'],
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']},
    index=[0, 1, 2, 3])
b= pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7'],
    'C': ['C4', 'C5', 'C6', 'C7'],
    'D': ['D1', 'D2', 'D5', 'D6']},
    index=[4,5,6,7])
# apppend()方法连接a与b
print(a.append(b))
  • 连接多个Dataframe对象
复制代码
a= pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3'],
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']},
    index=[0, 1, 2, 3])
b= pd.DataFrame({
    'A': ['E4', 'E5', 'E6', 'E7'],
    'B': ['F4', 'F5', 'F6', 'F7'],
    'C': ['G4', 'G5', 'G6', 'G7'],
    'D': ['H1', 'H2', 'H5', 'H6']},
     index=[4,5,6,7])
c= pd.DataFrame({
    'A': ['I4', 'I5', 'I6', 'I7'],
    'B': ['J8', 'J9', 'J0', 'J7'],
    'C': ['K9', 'K8', 'K7', 'K6'],
    'D': ['L8', 'L5', 'L7', 'L6']},
     index=[8,9,10,11])
print(a.append([b,c]))

相关推荐
huapiaoy7 分钟前
Redis中数据类型的使用(hash和list)
redis·算法·哈希算法
liu_chunhai11 分钟前
设计模式(3)builder
java·开发语言·设计模式
Mr.D学长16 分钟前
毕业设计 深度学习社交距离检测系统(源码+论文)
python·毕业设计·毕设
姜学迁19 分钟前
Rust-枚举
开发语言·后端·rust
wdxylb19 分钟前
解决Python使用Selenium 时遇到网页 <body> 划不动的问题
python
冷白白20 分钟前
【C++】C++对象初探及友元
c语言·开发语言·c++·算法
凌云行者24 分钟前
rust的迭代器方法——collect
开发语言·rust
代码骑士27 分钟前
【一起学NLP】Chapter3-使用神经网络解决问题
python·神经网络·自然语言处理
It'sMyGo28 分钟前
Javascript数组研究09_Array.prototype[Symbol.unscopables]
开发语言·javascript·原型模式
鹤上听雷29 分钟前
【AGC005D】~K Perm Counting(计数抽象成图)
算法