一、包安装
1.1 pylab包相关
matplotlib中含有pylab,不需要再pip install pylab,不然会出错。
1.2 PyEMD
PyEMD安装的命令是:pip install EMD-signal
1. 3 python 中tuple的修改
a = (1,2)
b = list(a)
b[0] = 3
a = tuple(b)
print(a)
print(a[0])
1.4 读取excel文件
import xlrd #引入库
wb=xlrd.open_workbook("C:/Users/Administrator/Desktop/b.xls") #打开文件并返回一个工作蒲对象。open_workbook可以点进去看看函数里面的参数的含义之类的,很详细,英语不好的可以百度翻译,翻译出来的结果差不多。
sheet_num=wb.nsheets #获取excel里面的sheet的数量
sheet_names=wb.sheet_names() #获取到Excel里面所有的sheet的名称列表,即使没有sheet也能用。
sheet=wb.sheet_by_index(0) #通过索引的方式获取到某一个sheet,现在是获取的第一个sheet页,也可以通过sheet的名称进行获取,sheet_by_name('sheet名称')
rows=sheet.nrows #获取sheet页的行数,一共有几行
columns=sheet.ncols #获取sheet页的列数,一共有几列
#获取第一行的数据
row_data=sheet.row_values(0) #返回给定的行数的单元格数据进行切片
col_data=sheet.col_values(1)#sheet.col_values(i):获取第i+1列数据
print(col_data[0])#输出这个数组中的第j个位置数据
print(col_data[1])
print(col_data[2])
#获取单元格的数据
#one_data=sheet.cell(row_index,col_index) #同样是通过索引的方式,cell(0,1)获取到的是第一行第二列的单元格数据
# cell_value=one_data.value #获取单元格的值
# cell_type=one_data.ctype #获取单元格的类型,在xlrd中,单元格的数据类型有6种,
1.5 读写xlsx
- read_excel默认把第一行数据作为索引,第一列数据不管
df = pd.read_excel('./origin.xlsx',header=None)
- 写入文件
data1.to_excel("./testw.xlsx",index=False)
1.6 dataframe转置
data.T
二、一些基本语法
2.1 判断数据类型
- type
- instance
type()不会认为子类是一种父类类型
isinstance()会认为子类是一种父类类型
三、常用的类
3.1 DataFrame
3.1.1 替换缺省值
参考: Pandas缺失值处理
df = data1.fillna(method='backfill') #用后面的值填充前面缺失的值
#df = data1.fillna(method='ffill') #用前面的值填充前面缺失的值
3.1.2 取到某一行
- 根据索引读取某一行
df.iloc[0,:]
- 根据行名取某一行
cold = data1.loc["col1",:];
- 取多行
df.loc[0,2]
- 用iloc
print(df.iloc[0,:])
3.1.3 取某一列
- 取第一列
print(df.iloc[:,0])
- 根据行名取某一列
cold = data1.loc[:,"col_name"];
3.1.4 取某一行某一列
print(df.iloc[0,0])
3.1.5 series转为dataframe
第1步:
pd.Dataframe(series, columns=[‘列名2’])
或
series.to_frame(name=‘列名2’)
第2步:
Dataframe.reset_index().rename(columns={‘index’:‘列名1’})
也可以
第1步:
pd.Dataframe(series)
或
series.to_frame()
第2步:
Dataframe.columns = [‘列名1’, ‘列名2’]
3.1.6 行列转置
3.1.7 获取行数和列数
#获取行数
df.shape[0]
# 或者
#获取列数
df.shape[1]
3.1.8 判断为空
- 判断某一列的值是否都为空
cold = data1.loc[:,"d"];
print(pd.isnull(cold).all())
3.1.9 读取某一行到某一列
import pandas as pd
data = pd.read_excel('./test.xlsx')
data1 = pd.read_excel('./test1.xlsx')
print(data)
print(data1)
var = data.iloc[[0,1], [0,1]];
print(data.iloc[0,0])
print("data")
print(var)
print("haha")
3.2 取时间
x=pd.date_range('2021-4-1 0:00:00',periods=2*11,freq='10MIN')
- 时间为横坐标,画图
# np.random.randn 标准正态分布的随机数,np.random.rand 随机样本数值
x=pd.date_range('2022-4-21 0:00:00',periods=2*11,freq='10MIN')
y = np.array(data1).flatten()
print(len(y))
# #自己加的代码
# tmp = list(x.shape)
# tmp[0] = 539
# x.shape = tuple(tmp)
plt.scatter(x,y) # plot(横坐标,纵坐标, 颜色)
plt.plot(x,y,'g') # plot(横坐标,纵坐标, 颜色)
3.3 np
3.3.2 np.array()函数
- ndarray是一个类,其默认构造函数是ndarray()。
array是一个函数,便于创建一个ndarray对象。 - np.array函数的作用:列表不存在维度问题,但数组是有维度的,而np.array()的作用就是把列表转化为数组,也可以说是用来产生数组。
3.3.1 ravel()和flatten()
- ravel()和flatten()是将多维数据展平为一维数据,功能相同,区别在于一个是引用操作,一个是复制操作。ravel()展平数据后,修改后面的数据会影响前面的数据,而flatten()展平数据后,不会影响前面的数据。
参考:python学习笔记之-展平函数ravel和flatten及两者的区别
3.4 np.ones
python-Numpy学习之(二) numpy库(ones,zeros,eyes函数)
3.5 np.convolve()
- 卷积函数库
四、画图
4.1 经典模态分解
- 数据包
4.2 CEEMDAN处理数据
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
data = pd.read_excel('xx.xlsx', header=None)
data1 = data.replace({0: np.NaN})
#将图标内嵌到网络中
#%matplotlib inline
df = data1.fillna(method='ffill') #用前面的值填充前面缺失的值
#df = data1.fillna(method='backfill') #用后面的值填充前面缺失的值
import numpy as np
from PyEMD import EEMD, EMD, Visualisation
import pylab as plt
from PyEMD import CEEMDAN
# 生成res的分解
IImfs = []
def ceemdanCaulcate(data):
ceemdanObj = CEEMDAN()
ceemdanObj .ceemdan(data)
imfs, res = ceemdan.get_imfs_and_residue()
plt.figure(figsize=(4, 4))
# plt.subplot(imfs.shape[0]+2, 1, 1)
# plt.plot(data,'r')
for i in range(imfs.shape[0]):
#子图的位置,有1*imfs.shape[0]格子
plt.subplot(imfs.shape[0] + 2, 1, i + 1)
#绘图
plt.plot(imfs[i], 'g')
plt.ylabel("IImf %i" % (i + 1))
#把坐标平均分成几份
plt.locator_params(axis='x', nbins=10)
# 在函数前必须设置一个全局变量 IImfs=[]
IImfs.append(imfs[i])
#调整边距和子图的间距,hspace越大,子图越小
plt.subplots_adjust(hspace=0.8)
plt.subplot(imfs.shape[0] + 3, 1, imfs.shape[0] + 3)
plt.plot(res, 'g')
plt.ylabel("Res")
return res
print(np.array(df).ravel())
#ravel将数据处理为一维的,默认是按行优先,ravel('F'),按列优先
res=ceemdanCaulcate(np.array(df).ravel())
4.3 防止多个图出现在一个图框里
plt.show()
五、读取文件问题
5.1 读不了xlsx格式文件
- 降低xlrd的版本
5.2 参考文件
『Python』Excel文件的读取以及DataFrame的相关操作 (2)
使用Pandas处理excel文件-(4)读写excel表格
5.3 第一行,列作为标签使用
#header=0表示第一行作为列标签使用,index_col=0表示第一列作为行标签使用
data = pd.read_excel('4_2test.xlsx',header=0, index_col=0)
5.4 根据标签删除行列
- 删除列
data2 = data1.drop(columns=["a","b"])
- 删除行
data3 = data1.drop(index=["col1"])
5.5 获得dataframe的列名
print(data1.keys())
print(list(data1.columns))
5.6 遍历excel数据并删除空白列/行
- 根据列名
data1.columns
for i in data1.keys():
colTmp = data1.loc[:, i];
#如果该列的所有数据都是空
if(pd.isnull(colTmp).all() == True):
#inplace=True则将改动在原数据生效
data1.drop(columns=[i],inplace=True)
- 根据行名,并且删除空白行
data1.index
for i in list(indexList):
colTmp = data1.loc[i, :];
#如果该列的所有数据都是空
if(pd.isnull(colTmp).all() == True):
#inplace=True则将改动在原数据生效
data1.drop(index=[i],inplace=True)
print(data1)
六、安装包
6.1 命令
pip install EMD-signal