本文记录python数据处理中常见的操作,主要涉及pandas、matplotlib、scipy、fitter库。
(持续更新~)
import pandas as pd
import matplotlib.pyplot as plt
import sys
1.pandas 数据处理
1.1 数据读取或存储
1.1.1 csv格式文件
(1)读取
注意,只要数据的内容是以某个字符分隔,都可以使用。
示例:
data = pd.read_csv( filepath_or_buffer=of,
index_col=None,
name=['a','b','c'],
sep=',',
dtype={'a':int, 'b':int, 'c':float} )
# filepath_or_buffer:指定待读取文件路径
# sep:指定分隔符,默认为','
# name:指定列名称,list类型
# index_col:指定行列名称所在位置,None就是没有
# dtype:指定每一列的数据类型,dict类型
通常情况下,仅需指定filepath_or_buffer
和index_col
即可。数据类型自动推算。
(2)写入
data.to_csv(sf)
# sf:指定输出文件名称
1.1.2 xlsx格式文件
(1)读取
data = pd.read_excel(of, index_col=0)
# of:是待读取文件的路径
# index_col:行列名称所在位置,0表示行列名称在数据的第一行和第一列
(2)写入
data.to_excel(sf)
# sf:指定输出文件名称
1.2 表格处理
(1) 前后两行做差diff
data.diff()
# 默认为行做差
(2)列插入 insert
注意:需要保证数据长度严格一致,才能插入.
data.insert(loc=len(data.columns),column='delay_ms', value=delay_ms)
loc:插入的位置,这里是插在最右侧
column:指定插入的列名
value:指定插入的元素
(3)行插入.loc方法
如果需要插入行,直接通过索引实现
df.loc[‘new_idx’] = []
# .loc方法可以扩大可以扩大DataFrame;而.iloc不可以
(4)删除drop
data.drop([0], inplace=True) # 本地修改
# inplace:本地修改,还是返回一个copy。True为本地修改。
# index= 行标签,指定后删除该行标签对应的数据
# colums= 列标签,指定后删除该列表前对应的数据
(5) 拼接
concat: 可以使用函数 .concat 按列和按行连接多个表
merge: 对于类似数据库的表合并/连接,请使用函数.merge
1.3 常见使用
(0)创建DataFrame
step = [1,5,10,15,20,25,30,35]
a= pd.DataFrame([],columns=step)
# 绘图
a.plot() # 注意:线形是style
(1)常见统计量
df.mean()
df.std()
df.describe()
(2)常见方法/索引
df.index # 求索引
df.columns # 丢列名称
# 修改上述值,仅需进行操作: df.index= [a,b,c,d] (需保持维度一致,防止出错)
(3)格式转换
# Pandas转为list
df.values.tolist()
df.loc[:,'a'].values.tolist()
# 转换后,是一个两层的list,每个元素为一个list
需要reshape,(reshape同样是两层,这是在索引第一项即可)
c.to_numpy().reshape(1,10)[0]
2. scipy
(先占个地方,以后再写)
3.文件检索/匹配/名称
from glob2 import glob
import re
import os
file = sys.argv[1] # 命令行读入file
os.path.dirname(file) # 获取basename
path = os.path.dirname(file)
name = re.sub(r".xlsx", "", os.path.basename(file))
paths = glob(r"test*.txt") # 搜索指定格式下的文件
4.输入/输出
(1)命令行输入输入
import sys
sys.argv[idx]
(2)格式化输出
print("t0=0,t1={},t2={}".format(t1,t2))
5.绘图
(0)创建画布/调节/图像存储
fig, ax = plt.subplots(figsize=(5, 4)) # 创建画布,并设置画布大小
ax.legend(frameon=False) # 不显示图例的周边的框
plt.subplots_adjust(left=0.2, top=0.9, bottom=0.1, right=0.95)# 调整画布的边距
plt.savefig("fig.png"), dpi=400) # 存储画布
plt.show() # 显示画布
plt.close() # 关闭画布
(1)字体设置(全局设置)
fontSize = 10.5
plt.rcParams['font.sans-serif'] = ['STSong'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.rcParams['font.size'] = fontSize # 坐标轴字体大小
plt.rc('font', family='Times New Roman') # 坐标轴字体
ax.ticklabel_format(style='sci',axis='y') # 使用科学计数法
(2)label中的上下标
$_{}$ 下标
$^{}$ 上标
{}里面填写要设置的格式内容
非斜体设置$\regularmath{}$
如果两个要同时设置
$\regularmath{_{xxx}}$
xxx为要设置的内容(非斜体的字体与下面设置的字体形式一致)
注意,写入时要加””
(3)坐标轴/注释设置
ax.set_xlabel("time(h)") # 设置x坐标轴名称
ax.set_ylabel("error(ms)") # 设置y坐标轴名称
ax.axis([0,4,None,None]) # 设置显示范围[xmin,xmax,ymin,ymax],None表示无限制
ax.legend(loc='upper right',frameon=False) # 图例设置,loc设置图例显示的位置,frameon=False表示不显示图例的边框
ax.set_title(name+" error") # 设置图的标题,一般都不用
plt.text(xpos,ypos,"content") # 设置标注文字,在(xpos,ypos)处设置文字“content”
(4)嵌入式子图绘制
# 创建子坐标轴
axins = inset_axes(ax,width="40%",height="50%",
bbox_to_anchor=(0.12,.2,1,1),
bbox_transform=ax.transAxes,
loc=3)# 宽高相对于父ax的比例
# ax就是父图,axins就是创建的子图
# width,height:宽高相对于父ax的比例
# loc=3 -- lower left:移动相对左下角进行
# bbox_to_anchor:位置调整,是相对loc所指定的位置的调整。(左,下,宽,高)(注意,宽高是相对于缩放后调整的。)
#
# 创建子图与父图的联系示意
mark_inset(ax,axins,loc1=2, loc2=3)
# 标记的loc1和loc2就是引线的位置
# (1,2,3,4) 对应(右上、左上、左下、右下)逆时针方向
(5)plot/scatter
plt.plot(x,y) #绘制折线图
plt.scatter(x,y,marker="*") #绘制散点图,标签为*