抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >
1
2
import numpy as np
import pandas as pd

pandas是基于Numpy的工具, 为解决数据分析任务而诞生.

I 数据定义

1.1 Series

类似一维数组对象, 由一组数据(value)及一组与之相关的索引(index)组成, 默认index从0开始. Numpy的数组通过隐式定义的整数索引获得数值, 而Pandas的Series对象用一种显示定义的索引于数值关联(形态更倾向于字典)
数据定义:

1
2
3
4
5
6
7
a1 = pd.Series([1,2,np.nan,5])

dict = {'a':20, 'b':30, 'c'=70}
a2 = pd.Series(dict)

a2.index # 获取索引
a2.values # 获取值

1.2 DataFrame

DataFrame是一个表格型数据类型, 既有行索引也有列索引, 可认为是一组Series的纵向排列
数据定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dates = pd.date_range('2023-06-29', periods=4)

[in1] Dates
[out1] (['2023-06-29', '2023-06-30', '2023-07-01', '2023-07-02'])

DF1 = pd.DataFrame(np.random.randn(6,4), index=dates, columns=['c1','c2','c3','c4'])

[in2] DatesFrame
[out2]
c1 c2 c3 c4
2023-06-29
2023-06-30 (随机矩阵)
2023-07-01
2023-07-02

以上index和column可省略, 此时索引从0顺序排列

根据列构造:

1
2
3
4
5
6
7
8
df2=pd.DataFrame({
'A': [1,2,3,4],
'B': pd.Timestamp('20210606'),
'C': pd.Series([1,6,9,10],dtype='float32'),
'D': np.array([3] * 4,dtype='int32'),
'E': pd.Categorical(['test','train','test','train']),
'F': 'foo'
})

II 数据检索

数据检索可通过行列的索引或位置
索引检索

2.1 列检索 by index

使用一个下标索引某一列, 该风格更倾向数据库和数组/列表索引相悖

1
2
3
DF['c2']                # 取出某一列
DF.c2
DF[1:3] # 提取1~3列

2.2 行检索 by index

1
data.loc['2023-06-29']

2.3 行列检索 by index

1
2
3
DF['c3']['2023-06-29']
data.loc['2023-06-29',['A','B']]
data.loc['2023-06-29','A':'B']

2.4 位置检索

使用iloc通过位置检索数据

1
DF.iloc[2,2]

2.5 条件检索

此条待查证

1
2
DF[DF.A>8]
DF.loc[DF.A>8]

III 数据修改

3.1 赋值

通过II中提供的方法检索得到的数据可直接赋值, 无论是一个数据还是一组数据
对单个数据赋值:

1
2
DF.iloc[2,2]=111
DF.loc['20200629','B']=2222

根据条件赋值:

1
2
3
DF.B[df.A>4] = 0
DF.B.loc[df.A>4] = 0
DF['F'] = 0 #赋值一列

3.2 重排序

1
2
3
4
# ascending adj.上升的
Data1.sort_index(axis=0,ascending=Fales) # 列索引降序
Data2.sort_index(axis=1,ascending=True) # 行索引降序
Data3.sort_values(by='C',ascending=False) # C列降序

3.3 添加项目

添加列(Series), 长度需对齐.

1
2
DF['F'] = np.nan
DF['E'] = s1

添加行

1
2
DF.iloc[1] = np.nan
DF.loc['20230629'] = np.nan

丢失数据处理

丢失数据修改

1
2
3
4
5
6
df.dropna() # 删除所有由nan的行列
df.dropna(
axis=0, # 0:对行操作
how='any' # 'any':只要存在nan便drop, 'all':全为nan才drop
)
df.fillna(value=0) # 替换nan数据

丢失数据检查

1
2
3
4
df.isnull()                 # 检查数据是否为null(是否为0), 返回一个相同大小由布尔类型组成的矩阵
df.isna() # 检查是否为nan
df.isnull().any() # 按列检查矩阵是否有null 返回一列纵向布尔变量
np.any(df.isnull())==True # 检测是否存在nan

IV 数据合并

4.1 直接合并

1
2
3
4
5
6
7
8
pd.concat([DF1, DF2, DF3],axis=0)
# 数据纵向合并, 此种方法合并的数据索引将不变化

pd.concat([DF1, DF2, DF3],axis=0, ignore_index=True)
# 合并时重置索引

DF1.append(DF2, ignore_index=True)
# append只有纵向合并

4.2 join合并

参照SQL语言

1
2
3
4
5
6
7
8
pd.concat([DF1, DF2], axis=0, join='outer',srot=False)
# 纵向合并, 有相同column的上下成列, 否则独自成列

pd.concat([DF1, DF2], axis=0, join='inner')
# 纵向合并, 只保留相同column

pd.concat([DF1, DF2], axis=1, join_axes=[df1.index])
# 横向合并, 按照提供的index合并

4.3 根据两组key合并

1
2
3
4
5
6
7
8
9
10
11
12
#定义资料集
left = pd.DataFrame({
'key1': ['K0', 'K0', 'K1', 'K2'],
'key2': ['K0', 'K1', 'K0', 'K1'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({
'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
pd.merge(data1, data2, on=['index1', 'index2'],how='inner')

how=
‘inner’: 仅保留索引完全相同的列
‘outer’: 保留所有列
‘left’: 保留左侧索引
‘right’: 保留右侧索引

4.4 根据index合并

pd.merge(left, right,left_index=True,how=’outer’)
pd.merge(left, right,left_index=True,right_index=True,how=’inner’)

4.5 overlapping问题

为重复列添加后缀
suffixes=[‘_boy’,’_girl’]

V 数据读写

5.1 数据导入

读入的数据为一个DataFrame

1
2
3
pd.read_csv('InData.csv')       # 读取以逗号分隔的数据
pd.read_table('InData.csv') # 读取以空格或制表符分隔的数据
pd.read_excel('MyExcel.xlsx') # 读取Excel

可选参数:
header=None:第一行是否作为列名
sep=’\t’:分隔符

5.2 数据导出

1
2
data.to_csv('MyCsv',index = False)
data.to_pickle('MyData.pickle')

VI 数据统计

count()数量
first()、last() 第一项与最后一项
mean()、median() 均值与中位数
min()、max() 最小值与最大值
std()、var() 标准差与方差
mad() 均值绝对偏差(mean absolute deviation)
prod() 所有项乘积
sum() 所有项求和

VII 绘图

import natplotlib.pyplot as plt
data.plot()
plt.show()

参考文献
(https://blog.csdn.net/weixin_55270959/article/details/125582472)
(https://blog.csdn.net/m0_52990609/article/details/124856533)

评论