Pandas高级
日期处理
# 需要的模块
import time
from datetime import datetime
from datetime import timedelta
# 获取当前时间
now=datetime.now()
# 获取 now 的年月日
now.date()
# 获取 now 的年月日
now.time()
# 时间戳
time.time()
# 将当前时间格式化显示
now.strftime('%Y-%m-%d %H:%M:%S %A %j')
strftime()
时间日期格式化符号
%y 两位数的年份表示
%Y 四位数的年份表示
%m 月份
%d 月内中的一天
%H 24小时制小时数
%I 12小时制小时数
%M 分钟数
%S 秒
%j 年内的一天
# 字符串格式转化为日期格式
time_str= '北京时间:2020-08-08 09:10:20'
datetime.strptime(time_str,'北京时间:%Y-%m-%d %H:%M:%S')
# 日期是可以做减法的 比如:
time1=datetime(2020,8,23)
time2=datetime(2020,6,9)
time1-time2
结果返回的是:datetime.timedelta(days=75)
合并数据集
pd.merge()
合并两个DataFrame
参数
left
要连接的左边的数据
right
要连接的右边的数据
how
连接方式(默认inner)
'left', 'right', 'outer', 'inner'
on
默认按相同列名称合并,可以用on指定
可以多列合并,on=['key1','key2']
left_on / right_on
没有相同的列,可以用left_on='' right_on=''
pd.concat()
合并两个Series
参数
axis: 0:横向连接
1:纵向连接
join:连接方式(默认:outer)
ignore_index: (清除索引,默认不清除)
keys:将原参与合并的数据进行标记,标记后会形成多层索引
names:给生成的索引取个名称
pd.combine_first()
以左边非nan为主
如果左边的值是nan右边不是,用右边的
左边索引上没有的用右边
combine()
# 保留合并的最大值/最小值
print(df5.combine(df6,func= np.maximum ))
print(df5.combine(df6,func= np.minimum ))
重塑和轴的选择
多重索引
index=[
list('aaaabbbccc'.upper()),
[f'编号{i}' for i in range(1,11)]
]
index=[
['武器']*5+['法宝']*5,
list('aaaabbbccc'.upper()),
[f'编号{i}' for i in range(1,11)]
]
stack()
将列索引转会行索引
unstack()
将行索引转为列索引
默认将最内层的行索引转为列索引
函数映射和替换值
unique()
对一个Series取唯一的值
duplicated()
返回一个是否是重复数据的布尔虚空序列
~:非
在读取一次可以将重复的取出来
value_counts()
对值计数
Series.drop_duplicates()
丢掉重复值(默认保留第一个)
DataFrame.drop_duplicates()
subset = [列1,列2,...]默认所有列相同丢掉
keep='first' 保留第一个
inplace = 'False' 不在原值
replace()
替换值
xxx.replace([-999,-1000],[666,400])
xxx.replace({-999:666,-1000:777})
数据拆分/异常值筛选和过滤
pd.cut
根据区间,求数量,结合值统计 value_counts()
x
被分割的值
bins
分箱,可以是数字也可以是list-like的分箱
right
默认右边闭合,False左边闭合
labels
给区间起个名字,让值统计更直观
retbins
默认False, 为True,返回一个区间数组
precision
默认精度到小数点后三位
include_lowest
默认False 分割区间,默认不包含最小值,True包含
duplicates
重复的 默认保留重复值
ordered
是否排序 默认排序
pd.qcut
根据数量,求区间,结合值统计 value_counts()
X
被分割的值
q
可以是整数等分
子主题 4
np.sign()
取每个数的符号位
读取与写入文件
pd.read_csv()
读取csv文件
sep
以什么符号分隔(默认 , )
可以用正则表达式
header
读取没有明显名称的文件,不需要让首行作为列,用参数header=None
指定行数做列名
names
自定义读取列名称
给几个列,就会从最后向前读几列数据,剩下的都是index
超出都是nan
index_col
给行索引设置个名字
skiprows
跳过某一行
comment
表示一个字符在这一行出现就不要
na_values
需要读取xxx值为nan
pd.to_csv()
把想存的数据直接调用 to_csv ,就能存进去
encoding:指定编码
import sys
sys.stdout:预览
to_excel
存excel
需要调用openpyxl模块
read_excel
同读取csv参数 多了个sheet_name
数据聚合与分组计算
groupby()
按照某个Series 进行分组,返回一个分组后的对象,可以用list()转换查看结构,可以知道分组对象的每个值,分组依据和分组结果
参数
by
按哪一列分组
axis
按横轴还是纵轴分
可以直接使用聚合函数 例如: sum(),mean()
分组计算/apply/透视表
head()
取前面几行 默认5行
tail()
取后面几行
copy()
复制数据
apply()
应用一个函数
margins
添加个人小计
Matplotlib入门
折线图
plt.plot()
x
x轴坐标
y
y轴坐标
color
折线颜色
linewidth
线条宽度
'go--'
颜色 点位 线条风格
markersize
点的大小
marker
点位的形状
linestyle
线条风格
柱形图/条形图
plt.bar()
x
x轴坐标
y
y轴坐标
color
柱的颜色
plt.barh()
参数和柱形图一样
直方图
plt.hist
rwidth
每个柱子之间的宽度
histtype
设置直方图类型
饼状图
plt.pie()
startangle
起始角度
colors
颜色
labels
设置每个扇形图名字
shadow
阴影
explode
往出拉点
explode=(0,0,0,0.2)
autopct='%.2f%%'
占整体的百分比
labeldistance
label距离圆心的距离
radius
基于默认值大的倍数
散点图
plt.scatter()
x
x轴坐标
y
y轴坐标
s
设置点大小
c
设置点颜色
marker
设置点形状