目录
四.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-设置索引列
-
keys : 要设置为索引的列名(如有多个应放在一个列表里) (列值-->列标签)
-
drop : 将设置为索引的列删除,默认为True 保留当前列+(列值-->列标签)
-
append : 是否将新的索引追加到原索引后(即是否保留原索引),默认为False
-
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]))