Python知识汇总
后台-插件-广告管理-内容页头部广告(手机) |
重要链接:
matplotlib库:matplotlib — Matplotlib 3.5.1 documentation
seaborn库:seaborn.lineplot — seaborn 0.13.2 documentation (pydata.org)
DataFrame库:DataFrame — pandas 2.2.1 documentation (pydata.org)
Python Matplotlib 实现散点图、曲线图、箱状图、柱状图示例:Python Matplotlib 实现散点图、曲线图、箱状图、柱状图示例(满足基本的画图需求)_matplotlib实现散点图-CSDN博客
绘图颜色色板:matplotlib、seaborn颜色、调色板、调色盘。 - 知乎
常用函数:
基础操作合集:
获取所有列名 | list(df) df.columns.tolist() list(df.columns) |
获取数据类型 | type(df) 如显示: |
padas获取每列类型 | df.dtypes |
jupyter notebook中卸载某个三方包 | !pip uninstall package_name -y |
查看版本 | package_name.__version__ |
numpy改变数据形状 | pre=pre[:,np.newaxis] 如果数据(300,),运行后变为(300,1),再运行一次变成(300,1,1) |
padas拼接到一起 | df = df1.append(df2.append(df3)) |
计算某列除数和余数 | div,mod=divmod(df['num'],n),其中n为被除数 |
Pandas读取某列某行数据——loc、iloc
- loc:通过行、列的名称或标签来索引
- iloc:通过行、列的索引位置来寻找数据
- 数据:
- AA BB CC DD EE
- row1 2 3 56 55 4
- row2 5 7 4 34 5
- row3 9 7 4 7 15
- row4 5 72 43 34 5
- data1 = data.loc['row2'] #row2一行的值
- data1 = data.loc['row2',:] #row2一行的值
- data2 = data.loc[ : ,'BB'] #BB一列的值
- data3 = data.loc['row1', 'BB'] #row1行BB列对应的值,3
- data4 = data.loc['row2':'row3','AA':'DD'] #第2行到第3行,第BB列到第DD列这个区域内的值
- data5 = data.loc[ data.BB > 6] #等价于 data5 = data[data.BB > 6] #BB列大于6的每一行数据
- data6 = data.loc[ data.BB >6, ["BB","CC","DD"]] #切片操作,选择BB CC DD三列区域内BB列大于6的值
- data1 = data.iloc[1] #第二行的值,
- data1 = data.iloc[1, :] #效果与上面相同
- data2 = data.iloc[:, 1] #读取第二列的值
- data3 = data.iloc[1, 1] # 读取第二行,第二列的值
- data4 = data.iloc[1:3, 2:4] #左闭右开切片操作,第2、3行,第3、4列值
Python、Numpy和Pandas数据类型:
Python中的str和Numpy中的string、unicode(字符编码),在Pandas中都表示为object,也就是字符串在Pandas中的类型为object。
datetime数据类型转换:
- #object转为datatime
- df = pd.DataFrame({'date': ['2011-04-24 01:30:00.000']})
- df['date'] = pd.to_datetime(df['date'])
- #打印结果
- 0 2011-04-24 01:30:00
- Name: date, dtype: datetime64[ns]
- #datatime转为非时间数据
- df['date'] = df['date'].astype('object')
- #打印结果
- 0 2011-04-24 01:30:00
- Name: date, dtype: object
- #如果字符串格式不正规,可以通过format转换
- pd.to_datetime("20110424 01:30:00.000", format='%Y%m%d %H:%M:%S.%f')
时间补全、重采集resample()函数:
采样频率:python时序分析之重采集(resample) - 知乎
resampling采样相关算法、属性:Resampling — pandas 2.2.1 documentation (pydata.org)
- 按照一分钟的频率将时间补全,mean()将补齐的时间数据识别为NaN
- #ffill()方法使用前面的值来填充缺失的值,interpolate()是使用插值法补全,bfill()是向后补全
- df=df.resample('1T').mean().ffill()
- #获得五分钟为间隔的数据,asfreq()也可以换成其他,如first()
- df5=df.resample('5T').asfreq()
- df5=df.loc[::5,:]
pandas.Dataframe.set_index( )函数设置索引:
- 索引设置
- df.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
- -keys:列标签或列标签/数组列表,需要设置为索引的列
- -drop:默认为True,删除用作新索引的列
- -append:是否将列附加到现有索引,默认为False。
- -inplace:输入布尔值,表示当前操作是否对原数据生效,默认为False。
- -verify_integrity:检查新索引的副本。否则,请将检查推迟到必要时进行。将其设置为false将提高该方法的性能,默认为false。
pandas.Dataframe.reset_index()函数重置索引:
- 将索引列变为普通数据列
- drop: 重新设置索引后是否将原索引作为新的一列并入DataFrame,默认为False
- inplace: 是否在原DataFrame上改动,默认为False
- level: 如果索引(index)有多个列,仅从索引中删除level指定的列,默认删除所有列
- col_level: 如果列名(columns)有多个级别,决定被删除的索引将插入哪个级别,默认插入第一级
- col_fill: 如果列名(columns)有多个级别,决定其他级别如何命名
- import pandas as pd
- import numpy as np
- df = pd.DataFrame([('bird', 389.0), ('bird', 24.0), ('mammal', 80.5), ('mammal', np.nan)],
- index=['falcon', 'parrot', 'lion', 'monkey'], columns=('class', max_speed'))
- #图1
- print(df)
- #图2
- df1 = df.reset_index()
- print(df1)
- #图3
- df2 = df.reset_index(drop=True)
- print(df2)
pandas.Dataframe.rename()函数:
- 用来修改Dataframe数据的行名和列名。
- columns:列名
- index:行名
- axis:指定坐标轴
- inplace:是否替换,默认为False。inplace为False时返回修改后结果,变量自身不修改。inplace为True时返回None,变量自身被修改。
- >>> import pandas as pd
- >>> df
- A B
- 0 1 4
- 1 2 5
- 2 3 6
- # 方法一:不用axis修改。使用方法为df.rename(columns={"旧列名": "新列名"})
- >>> df.rename(columns={"A": "a", "B": "c"}) # 修改columns。inplace未设置,返回修改后的结果
- a c
- 0 1 4
- 1 2 5
- 2 3 6
- >>> df # inplace未设置,默认为false,则df自身不被改变
- A B
- 0 1 4
- 1 2 5
- 2 3 6
- >>> df_re=df.rename(columns={"A": "a", "B": "c"},index={0:"0a",1:"1a"}) # 同时修改行名和列名
- >>> df_re
- a c
- 0a 1 4
- 1a 2 5
- 2 3 6
- # 方法二:用axis修改,只修改行名列名之一时等价,无法同时修改
- >>> df.rename({1: 2, 2: 4}, axis='index') # 修改行名,1改成2,2改成4
- A B
- 0 1 4
- 2 2 5
- 4 3 6
- >>> df.rename(str.lower, axis='columns') # 列名大写变小写
- a b
- 0 1 4
- 1 2 5
- 2 3 6
绘图函数:
python matlplotlib/seaborn 绘制曲线的平均值标准差阴影图_带标准差阴影光谱曲线-CSDN博客
plt.annotate()函数:
用于在图中标注文字,需要用循环配合,一个点一个点的标记。
曲线中异常点/特征点的标记方法。
参考:https://matplotlib.org/3.5.1/api/_as_gen/matplotlib.pyplot.annotate.html
- #参数
- #s 为注释文本内容
- #xy 为被注释的坐标点
- #xytext 为注释文字的坐标位置;
- #weight 设置字体线型;color 设置字体颜色;arrowprops 箭头参数,参数类型为字典dict;bbox给标题增加外框
- import matplotlib.pyplot as plt
- import numpy as np
- x = np.arange(0, 6)
- y = x * x
- #图1
- plt.plot(x, y, marker='o')
- for xy in zip(x, y):
- plt.annotate("(%s,%s)" %(x,y), xy=xy, xytext=(-20, 10), textcoords='offset points')
- plt.show()
- #图2
- ax.annotate('data = (%.1f, %.1f)'%(xdata, ydata),
- (xdata, ydata), xytext=(-2*offset, offset), textcoords='offset points',
- bbox=bbox, arrowprops=arrowprops)
- #图3,上述用于标注文字,但如果想把特殊的坐标用点标示出来可以结合散点图函数
- x1=list()
- y1=list()
- plt.plot(x, y, marker='o')
- for xy in zip(x, y):
- if x>3:
- plt.annotate("(%s,%s)" %(x,y), xy=xy, xytext=(-20, 10), textcoords='offset points')
- x1.append(x)
- y1.append(y)
- plt.scatter(x1,y1,marker="p',color='m'))
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |