【2019】python3基础

Python 3 | 菜鸟教程 (一) 目录 一、Python3 简介 二、Python 发展历史 三、Python 特点 (一)易于学习 (二)易于阅读 (三)易于维护 (四)一个广泛的标准库 (五)互动模式 (六)可移植 (七)可扩展 (八)数据库 (九)GUI编程 (十)可嵌入 四、Python 应用 五、 Python3 环境搭建 六、Python3 下载 七、Python 安装 (一)下载地址 (二)Unix & Linux 平台安装 Python3: (三)Window 平台安装 Pyt 阅读详情

2019python3基础

  • python默认编码格式ASCII格式
    • #coding=utf-8

基础

1. 变量类型

  • 五个标准数据类型(内置数据结构类型)
    • 数字Numbers
    • 字符串String
    • 列表List
    • 元组Tuple
    • 字典Dictionary
序列a通用操作解释
子元素 in a判断是否包含
元素 not in a
a + a序列 链接
a * 6序列 重复
a.index(‘子元素’)返回 子元素的 index
a[0]索引
a[:]切片
a[::-1]步长
min(),max(),sum(),len()通用函数

字符串

  • str常用功能解释
    s1.replace(‘子元素’,‘替换为’,‘替换几次’)不填次数,就会全替换
    s.split(’ ')拆分,为list
    s1.join(s2)用s2中元素链接s1中各元素
    s.startswith(‘str’)判断,是否以str开头
    s.endswith(‘str’)判断,是否以str结尾
    s.upper()全大写
    s.lower()全小写
    s.swapcase()大小写互换
    s.capitalize()首字母大写
    s.isnumeric()判断,字符串是否只包含数字
    s.isalpha()判断,字符串是否至少有一个字符,且字符都是字母
    s.rstrip()删除字符末尾的空格

%格式化字符串

a = 'demo'
b = '%s is 样本' %a 
# %s 表示在这里要插入一个变量(字符串)
# %a 代表我们插入的变量是a

x = 4
y = 'haha'
z = 4.2
print('this is %i' %x)
print('this is %s' %y)
print('this is %f' %z)
print('this is %.2f' %z) # 输出2位小数,四舍五入
print('this is %.0f' %z) # 不四舍五入,直接切掉小数部分
print('this is %.2f' %x) # 

df['col1'].apply(lambda x:"%.2f%%"%(x*100)) # 转换为百分数
df.style.format({'col1':'{:.2%}'}) # 列转换为百分数
  • str格式化解释
    %i整型
    %+i显示正号
    '%.2f '% -0.01负数会直接显示负号
    %.0f不四舍五入,直接切掉小数部分
    %f浮点型
    %.2保留2位小数,四舍五入
    %.2e科学计数法
    %.4E科学计数法
    %g小数位数少时,自动识别为浮点数
    数据复杂时,自动识别为科学计数法
    %s字符型
    %%%

format格式化

  • .format(),生成新的字符串

  • str1.format格式化解释
    "User ID:{0}".format('demo'){}:占位符,其中数字可有可无
    "{}哈哈{}".format('a','b')其中数字可有可无
    "{}{}{}".format('a','b','c')不含数字时
    "{0}{1}{2}{0}".format('a','b','c')含数字:明确了指定
    "我的工作时{work}".format(work='数据分析师')变量指示(不一定是数字)
    "{:f}".format(3.1415)
    "{:.2f}".format(3.1415)保留2位
    "{:e}".format(3.1415)科学计数法
    "{:.0f}".format(3.1415)取整,不四舍五入
    "{:%}".format(3.1415)转为百分数
    "{:d}".format(10)整数

标识符

_foo不能直接访问的类属性通过类提供的接口进行访问
不能有from xx import *导入
__foo私有成员
_foo_代表python里特殊方法专用的标识

print输出

  • print默认是换行输出

    • 变量末尾加逗号,实现不换行输出

    • # 换行输出
      print('a')
      print('b')
      
      # 不换行输出
      print(x,y)
      
      # 不换行输出
      print(x),
      print(y),
      
  • str格式化

    print('我今年%.2f岁,生于%i月' % (1,2))
    

apply,map,applymap

  • map

    • 将函数套用到Series上的每个元素
  • 根据字典key与col值相同,将value替换

    a = {'col1_value1':'aa','col1_value2':'bb'}
    df['col1'].map(a)#col1列中值,与dictionary的key相同的,变为对应values
    
  • apply

    • 将函数套用到DataFrame上的行和列

    • 函数和自定义函数

      df['col'].apply(str.upper)
      df['col'].apply(自定义函数)
      
      def foo(x):
          a = str(x)='_a'
          return a
      def.index.apply(foo)
      
    • 匿名函数

      df.apply(lambda x:x.max() - x.min())
      df.apply(lambda x:x.max() - x.min(), axis=1)
      
    • 各列 分组 统计

      df.apply(pd.value_counts).fillna(0)
      
  • applymap

    • 将函数套用到DataFrame上每个元素(elementwise)

    • str格式化

      df.applymap(lambda x:'.2f'%x)
      

表达式

  • [str(x) for x in np.arange(10)] # 方法一
    list(map(str,np.arange(10))) # 方法二
    

Numpy

1 随机数

随机数解释
np.random.normal(loc, scale, size)正态分布
loc:均值
scale:标准差
np.random.rand()均匀分布
[0,1)之间的
np.randm.randn()标准正态分布
np.random.randint(100,200,10)随机整数
np.random.seed(1)种子
np.random.uniform(low,high,size)均匀分布
[low,high)
np.random.poisson(lams,ize)泊松分布
lam随机事件发生概率
np.random.choice(a[,size,replace,p])从一维数组a中以概率p抽取元素
形成size形状新数组
replace表示是否可以重用元素
np.random.choice(b,(3,2),p = b/np.sum(b))

Pandas

1 表格样式

  • 按元素修改字体样式

    # 小于0的元素,红色字体
    def colors(val):
        if val>48000:
            color='red'
        else:
            color='black'
        return('color:%s'%color)
    df[['col']].style.applymap(colors)
    
  • 按行列修改背景样式

    # 最大值的背景高亮显示
    def highlight_max(s):
        is_max = s == s.max()
        lst=[]
        for v in is_max:
            if v:
                lst.append('background-color:yellow')
            else:
                lst.append('')
        return(lst)
    
    df.style.apply(highlight_max,axis=0)# 每列最大值
    df.style.apply(highlight_max,axis=1,subset=['col1','col2'])# 两列对比,每行的最大值
    
    • subset参数
      • 相较于df[[‘col’]].style.,subset会显示整张表
  • 样式的索引和切片

    df.style.apply(highlight_max,subset=pd.IndexSlice[:2,:10])
    
  • 按百分数显示

    df.style.format('{:.2%}',subset=['col1','col2'])
    
    • .format(’{:.2%}’,subset=[‘col1’,‘col2’])
      • 对col1,col2列的值,转换为百分数
      • 是转换,不单单是添加个百分号
  • 指定每列,转换显示类型

    df.style.format({'col1':'{:.2%}','col2':'{+.2f}','col3':'{.4f}','col':'{:d}'})
    #对应列转换为百分数、显示正号的2位浮点数、四位浮点数、整数(转换为整数时,需要该列整型,而不是浮点型)
    
    • 一次转换为
      • 百分数
      • 显示正号,保留2位的浮点数
      • 四位小数点浮点数
      • 整数
        • 注意,转换为整数时,前提需要该列为int型——即可这种用法无意义(也许我的理解有误)
  • 缺失值

    df.style.highlight_null(null_color='red')
    
    • 缺失值背景红色高亮
  • 极值高亮显示

    df.style.highlight_max()
    df.style.highlight_min()
    
  • 色彩映射

    df.style.background_gradient()
    df.style.background_gradient(cmap='Greens',axis=1,low=0,high=1)
    
    • cmap
      • 颜色
    • axis
      • 0:该列的元素间比较
      • 1:该行的元素间比较
    • low、high
      • 设置颜色区间
      • 类似热力图右侧颜色区间
  • 条形图

    df.style.bar(subset=['col1','col2'],color='#d65f5f',width=100)
    
    • width
      • 最长的占格子的比例
  • 分断式构建样式

    df.style.\
        highlight_min().\
        bar(color='#d65f5f',width=100,subset=['col5','col6']).\
        bar(color='#333333',subset=['col1','col2'],width=80)
    
    • 末尾添加.\
      • 只要不是最后一个样式,末尾添加.\
      • 且.\不能有空格和注释

2 Series

  • 创建

    • 字典创建
    • 一维数组创建
    • 通过标量创建
    s=pd.Series(data=None, 
              index=None, 
              dtype=None,# np.str,object(字符串型)等
              name=None,
              copy=False,
              fastpath=False)
    pd.Series(10,index=range(3))# 通过标量创建
    
    s.index
    s.values
    s.name
    s2 = s1.rename('abc')
    
  • 索引

    • 位置下标
    • 标签索引
    • 切片索引
    • 布尔型索引
    s[0] # 下标索引
    s[['a','c','b']]# 标签索引 生成新Series
    s[1:3]# [1:3)
    s['a':'c']#标签切片,[a:c]
    s[s>3]# 布尔型索引
    
  • 基本技巧

    s.head(3)
    s.tail()
    
    # reindex不更改,只是选取index
    # 之前没有的index会返回NaN,这里填充
    s.reindex([5,2,3,'aa'],fill_value=0)
    
    # 对齐
    s1 +s2 # 其值按索引一一对应相加
    
    # 删除
    s.drop('子index')
    s.drop(['a','b'],inplace=True)# 按标签删除
    
    # 添加
    s['a']=100# 新标签index赋值,来添加
    s1.append(s2)# 添加一个数组
    

3 DataFrame

  • 创建

    df = pd.DataFrame(data=None, 
                 index=None,
                 columns=None,
                 dtype=None,
                 copy=False)
    
    # 1 字典创建
    a={'aa':['bb']}
    pd.DataFrame(a)
    
    # 2 序列、数组
    b={'bb':np.random.rand(3),
       'bbb':np.random.rand(3)} 
    pd.DataFrame(b) # values为序列、数组创建——两列元素必须相等
    
    # 3 Series
    c={'cc':pd.Series(np.random.rand(3)),
      'ccc':pd.Series(np.random.rand(4))} 
    pd.DataFrame(c) # values为Series创建时——两个Series元素数量可以不相等
    
    # 4 二维数组
    pd.DataFrame(np.random.rand(9).reshape(3,3))
    
    
    # 5 字典组成的——列表创建
    data=[{'a':1,'b':2},{'a':2,'b':3,'c':33}]
    pd.DataFrame(data)# 列表中两个字典值数量可以不一
    
    # 6 字典组成的字典创建
    data={'a':{'aa':1,'bb':2,'cc':3},
         'b':{'aa':2,'bb':2,'cc':3},
         'c':{'aa':3,'cc':33}}
    pd.DataFrame(data,columns=['a','c','b'])# columns为字典的key
    pd.DataFrame(data,index=['aa','A','bb'])# index为 子字典 的key,指定新标签,返回值为NaN
    
    
  • 索引

    df['col'] # 返回Series
    df[['col']]# 返回DataFrame
    df[['col1','col2']]
    df[df>0][['col1','col2']]
    df.loc[:,'col1':'col3']
    df.loc[['index3','index2'],'col1']
    df['col1'].loc[['index1','index2']]
    df.iloc[:3,:3]
    df[['col1','col2','col3']].iloc[:2]
    df[df>0].loc[['index1','index3']]
    df.query('col1 > 0')
    
    # 通过索引赋值
    
  • 基本操作

    df.index
    df.columns
    df.values
    df.dtypes
    df.T
    
    # 添加列
    df['newcol']=
    df[['new_1','new_2']]=
    
    # 删除
    del df['col'] # 删除列
    df.drop(['ind1','ind2'],axis=0,inplace=True)# 删除行
    df.drop(['col1','col2'],axis=1,inplace=False)#删除列
    
    
    # 对齐
    df1 + df2 # 元素按(index,columns)意义对应相加
    
    # 排序
    df.sort_values(['col1'],ascending=False)# 降序
    df.sort_values(['col1','col2'],ascending=True)# 升序
    

4 数值计算、统计基础

  • 常用数学、统计方法

    df['col'].dtype
    df.dtypes
    df.info()
    df.describe()
    df.quantile(q=0.75) # 统计分位数
    df.mean(axis=1,skipna=True)# 每行的均值,过滤掉空置
    df.sum()
    df.median() # 中位数
    df.count() # 统计非NaN值的数量
    df.min()
    df.std() # 标准差
    df.var() # 方差
    df.skew() # 偏度
    df.kurt() # 峰度
    
    # 累计
    df['col'].cumsum() # 累计和
    df['col'].cumprod() # 累计积
    df.cummax() # 累计最大值
    df.cummin() # 累计最小值
    
    # 唯一值
    s.unique().sort() # 去重、排序
    
    # 值计数
    s.value_counts(sort=False) # 计算出不同值出现的频率 ,sort:是否排序
    s.value_counts(normalize=True) # 频率是否转换为百分比
    pd.value_counts(s,sort=False)
    
    # 成员资格
    s.isin([3,2]) # 返回布尔值的Series
    df.isin(['a','bc'8]) # 返回布尔值的DataFrame
    s.isin(['a']) # 一定要加 []:s中是否包含a
    

5 文本数据-.str.

  • 通过.str.调用字符串

    • 自动过滤NaN
    df['col'].str.upper() # 大写
    df.columns.str.upper() # 大写
    df['col'].str.lower() # 小写
    df['col'].str.len() # len字符长度
    df['col'].str.count('b') # 单列,每格中字符串,包含字符b 的个数
    df['col'].str.startswith('b') # 判断每格字符的 起始是否为b
    df['col'].str.endwith('a') # 判断结束是否为a
    
    # 替换
    df['col'].str.replace('替换谁','替换为',n=1) # n:替换个数
    df['col'].str.replace(['替换1','替换2','替换为'])
    df['col'].str.replace({'替换1':'替换为','替换2':'替换为2'})
    
    # 拆分
    df['col'].str.split('拆分符',expand=True) # 拆分后,返回DataFrame
    s.str.split(',',expand=True,n=1)# n:拆分几刀
    s.str.split(',').str.get(1) # 拆分后选第2列
    s.str.split(',').str[0] # 拆分后选择第一列
    # 从字符串末尾拆分
    s.str.rsplit(',')# 从右到左,拆分
    
    # 去除每格前后的空格,无法去重中间空格
    df['col'].str.strip() # 去除字符串中空格
    df['col'].str.lstrip() # 去除字符串中左空格
    df['col'].str.rstrip() # 去除字符串中右空格
    
    # 字符串索引
    s.str[1:-1] # 去除收尾字符
    s.str[:2] # 取前两个字符
    s.str[0]# 取第一个字符
    

6 合并

  • pd.merge合并

    • SQL的join方式
    pd.merge(df1,df2,on='col')
    pd.merge(df1,df2,on=['col1','col3']) # 多键连接
    pd.merge(df1,df2,right_on='rcol1',lefg_on='lcol1')
    pd.merge(df1,df2,on=['rcol1','lcol1'],how='inner')# how:合并方式
    
    # 两个df的index作键
    pd.merge(df1,df2,left_on='key',right_index=True)
    pd.merge(df1,df2,left_index=True,right_on='2col')# 第一个df的index和第二个col作键
    pd.merge(df1,df2,left_index=True,right_index=True) # 以2个df的index作键
    pd.merge(df1,df2,on='key',sort=True,how='outer')# 排序,但会大大影响性能
    
    • sort=False
      • 是否排序
      • False,可大大提高性能
    • how=inner
      • 合并方式
      • inner,outer,left,right
    • suffixes=('_x', '_y'):默认
      • 合并后,之前同名的列添加后缀
      • suffixes=('_1', '_2')
  • join合并

    • 通过index合并
    df1.join(df2,how='outer')
    df1,join(df2['col3'])
    

7 连接

  • pd.concat

    pd.concat([s1,s2])# 上下堆叠
    pd.concat([s1,s2],axis=1) # 左右拼接 ,按index
    pd.concat([s1,s2],join='inner')# {'inner':'交集','outer':'联合'}
    pd.concat([s1,s2],join_axes(['index1','index2','index3'])) # 指定联合的index
    pd.concat([s1,s2],keys=['one','two'])# 上下堆叠,keys为外层index
    Pd.concat([s1,s2],keys=['a','b'],axis=1)# 左右拼接,keys覆盖其列名
    
    pd.concat([df1,df2])# 上下堆叠,新增col,index的空值为NaN	
    
  • combine_first

    • 修补
      • 按index,df1的NaN被df2填充
      • 如果df2的index多余df1,则更新到df1上
    df1.combine_first(df2)
    
  • update

    • 覆盖
      • 按index
      • 相同index的,df2覆盖df1
    df1.update(df2)
    
  • .map

    • 字典数据,与DataFrame关联
    df['new_col'] = df['字典共有col'].map(dict_data变量)
    

8 去重

  • duplicated

    s.unique()
    s.duplicated() # 返回布尔序列
    s.drop_duplicates()# 移除重复值
    

9 分组统计

  • 功能

    • 根据某些条件将数据拆分成组
    • 对每组独立应用函数
    • 将结果合并到一个数据结构中
    df.groupby(by=['col1','col3'],
               axis=0,# 默认行分组
               level=,
               as_index=True,
               sort=True,
               group_keys=True,
               squeeze=False
              ).mean() # 统计方法
    
  • 分组——可迭代的对象

    for n, g in df.groupby('col1'):# n:组名, g:分组后的DataFrame
        print(n,g)
        
    list(df.groupby('col1'))
    
  • 操作

    df.groupby('col1').groups # 返回字典{'组名':'DataFrame'}——查看分组后的结构
    
    df.groupby('col1').get_group('组名1') # 返回一个组的DataFrame
    df.groupby('col1').groups['组名2']# 返回组的DataFrame——字典的索引
    
    df.groupby('col1').size()# 查看分组后的长度,每组元素数
    
  • 按照数据类型分组

    for n, p in df.groupby(df.dtypes,axis=1): # axis=1,列分组
        print(n,p)
    
  • 通过字典或Series分组

    dic={'col1','one','col2','one','col3':'two','col4':'two'}
    df.groupby(dic,axis=1)
    # col1、col2列分组到one,col3、col4列分组到two
    
  • 通过函数分组

    df.groupby(lambda x:x.split('')[0])#对字符串型索引分组
    df.groupby(df['timecol'].dt.week)#Datetime64[ns]类型列
    df.groupby(len).sum()# 按index字符长度分组
    

分组计算

  • 函数方法

    df.groupby(level=0)#唯一索引用,将统一index分为一组
    
    grouped=df.groupby('')
    grouped.first()#非NaN的第一个值
    grouped.last() # 非NaN的最后一个值
    grouped.sum() # 和
    grouped.mean() # 均值
    grouped.median() # 中位数
    grouped.std()# 标准差
    grouped.var()# 方差
    grouped.prod()# 非NaN的积
    
  • 多函数计算

    df.groupby('col').agg(['mean',np.sum])# 分组后分别将isuan均值、求和
    df.groupby('col')['col3'].agg({'result1':np.mean,
                                  'result2':np.sum})#和上面一样,但可自定义列名,而不是自带的mean和sum
    

分组转换

  • transform

    • 字符串不能进行计算
    • 返回的结构,与df中可计算的每个元素位置一一对应
    df.groupby('col1').mean()
    
    df.groupby('col1').transform(np.mean)#与上面比,其结构与df的结构一致
    
  • apply

    • apply直接运行其中的函数
    df.groupby('col1').apply(lambda x:x.describe())
    
    # 返回排序后的前n行
    def f_df1(d,n):
        return(d.sort_index()[:n])
    # 返回分组后的'k1'列
    def f_df2(d,k1):
        return(d[k1])
    df.groupby('col1').apply(f_df1,n=2)
    df.groupby('col1').applyt(f_df2,'col2')
    
  • df.groupby(['col1','col2']).size().unstack().plot.barh(stacked=True,color=['r','k'])
    f.groupby(['unique_carrier','delayed']).size().unstack().plot.barh(stacked=True,color=['red','k'])
    

10 透视表

  • pd.pivot_table()

    
    
  • 交叉表

    pd.crosstab()
    

11 数据读取

  • pd.read_table

    • 读取csv、txt
    pd.read_table('demo.txt',delimiter=',', # 指定分隔符,也可用sep=','
                 header=0, # 第一行用作columns
                 index_col=1) # 指定第2列为索引
    
  • pd.read_csv

    • 多数情况先将EXCEL导出为csv读取
    pd.read_csv('demo.csv',
                engine='python', # 解析方式
                encoding='gbk', # 指定字符集类型,即编码
               )
    
    • engine='python'
      • 解析方式
      • 分析引擎
      • 可选C或python
        • C:引擎快
        • python引擎:功能完备
  • pd.read_excel

    pd.read_excel('demo.xlsx',
                  sheetname='读取页的名称', # 返回多表使用sheetname=[0,1],若sheetname=None则返回全表
                  header=0,
                  index_col=1 # 读取为索引,
                 )
    
    • sheetname=
      • None
        • 读取全表
        • 返回字典
      • [0,1]
        • 读取多表
        • 返回字典
      • ‘表名1’
        • 返回DataFrame
        • 读取表名为’表名1’的表
      • 1
        • 返回DataFrame
        • 读取第2张表

12 虚拟变量

pd.get_dummies(df['col']) # 创建虚拟变量

pd.concat([df,pd.get_dummies(df['col'])],axis=1) # 合并

时间模块

  • 时间转字符串

    • datetime.now().strftime('%Y-%m-%d')
  • 字符串转时间

    • datetime.strptime('2017/4/12','%Y/%m/%d')
  • datetime转UNIX timestamp(UNIXtimestamp:从1970/1/1起,到现在,过了多少秒)

    • from time import mktime
      mktime(datetime.now().timetuple())
      
  • UNIX timestamp转datetime

    • datetime.fromtimestamp(1492859823)
      
  • 区分:

    • datetime.datetime:Datetime模块的数据类型
    • Timestamp:pandas的时间数据类型
      • 单个时间点
    • DatetimeIndex:pandas的时间数据类型
      • 多个时间点
    • TimeSeries:时间序列
      • 索引为DatetimeIndex的Series
  • datetime库

    import datetime
    datetime.date.today()
    datetime.date(2019,2,12)
    
    datetime.datetime.now()
    t1 = datetime.datetime(2019,2,1)
    t2 = datetime.datetime(2019,2,12,11,22,33)
    
    t2 - t1 # 时间差,timedelta
    t1 - datetime.timedelta(1) 
    
  • parser.parse 日期字符串转换

    from dateutil.parser import parse
    
    date='12-30-2018'
    
    # 将str转换为datetime.datetime 
    parse(date) 
    parse('5/1/2019',dayfirst=True) # 国际通用格式中,日在月之前,可以通过dayfirst来设置
    parse('Jan 31, 1997 10:45 PM') # 解析各种格式的日期,不支持中文
    

pd.Timestamp()

  • 时间戳-pandas的时间数据结构——Timestamp:单个时间点

    # 数据类型pandas的Timestamp
    pd.Timestamp('2019-1-20 13:00:22')
    

pd.to_datetime()

# 单个时间数据,转换为pandas的时间戳Timestamp
pd.to_datetime(datetime.datetime(2019,1,22))
pd.to_datetime('2018/11/11')

# 多个时间数据,转换为DatetimeIndex
pd.to_datetime(['2018/11/11','2017/11/11','2016/11/11'])
pd.to_datetime([datetime.datetime(2019,1,22),datetime.datetime(2019,1,23)])

# 当数据中包含其他格式数据是
pd.to_datetime(['2018/11/11','ABC','2016/11/11'],errors='ignore')
  • errors='ignore'
    • 不可解析时,返回原始输入
  • errors='coerce'
    • 不可解析时,该元素返回为NaT(Not a Time)

时间戳索引

pd.DatetimeIndex

  • DatetimeIndex:多个时间点

  • pd.DatetimeIndex()

    • 支持
      • str
      • datetime.datetime
    • 以DatetimeIndex为index的Series为——时间序列
    # 解析多个为DatetimeIndex
    pd.DatetimeIndex(['2018/11/11','2017/11/11','2016/11/11'])
    
    # 解析单个为Timestamp
    pd.DatetimeIndex('2018/11/11')
    

pd.date_range()

  • 生成DatetimeIndex

    # 默认 日历日频率
    pd.date_range('1/1/2017','1/1/2018',normalize=True,name='demo')
    pd.date_range('1/1/2017',periods=10)
    pd.date_range(end='1/1/2017 13:00:00',periods=10)
    
    pd.date_range('20170101','20180101',closed='right')#左开右闭
    pd.date_range('20170101','20180101',closed='left')#左闭右开
    pd.date_range('20170101','20180101')#左闭右闭
    
    
    
    # 默认 工作日频率
    pd.bdate_range('20190101','20191230')#工作日频率
    
    # 转换为list
    
    list( pd.date_range('20170101','20180101',closed='right') )
    
    • normalize=
      • 时间参数值正则化到午夜时间戳
    • name=
      • 索引对象名称
    • tz=
      • 时区
  • freq

    freq=’’解释
    H每小时
    B每工作日
    D每日历日
    T每分
    MIN每分
    S每秒
    L每毫秒-千分之一秒
    U每微秒-百万分之一秒
    W-MON每周——从每月第一个星期一开始算起
    星期缩写MON/TUE/WED/THU/FRI/SAT/SUN
    W-2MON每2周——每月的第2个星期一开始算
    M每月最后一个日历日
    Q-月指定月为季度末,每个季度末最后一月的最后一个日历日
    A-月每年指定月份的最后一个日历日
    月缩写JAN/FEB/MAR/APR/MAY/JUN/JUL/AUG/SEP/OCT/NOV/DEC
    BM每月最后一个工作日
    BQ-月指定月为季度末,每个季度末最后一月的最后一个工作日
    BA-月每年指定月份的最后一个工作日
  • 符合频率

    freq=''
    7D
    2h30min
    2M
  • 时间频率转换——asfreq

    df.asfreq('4H',method='ffill')# 频率改为4H
    
    • method=
      • 插值模式

.shift()

  1. 对数值进行位移——超前/滞后数据
df.shift(2)# 正数: 数值后移(滞后)
df.shift(-2)# 复数: 数值前移(超前)
  • 百分比
df['newcol'] = df['col1'] / df.shift(1)['col1'] -1 # 元素与 前一天比较
df.style.format('{.2%}',subset='newcol')# 转换为百分数
  1. 对时间戳进行位移
df.shift(2,freq='D') # 对时间戳进行位移 
df.shift(2,freq='T') #

pd.Period()

  • 创建时期_时间段

    p = pd.Period('2019',freq='M') # 生成一个月为频率的时间构造器,2019-01
    
    p+1 # 2019-02
    p-1 # 2018-12
    
    # 频率转换
    p = pd.Period('2019','A-DEC')
    p.asfreq('M',how='start') # 转换成别的频率,2019-01
    p.asfreq('D',how='end') # 2018-12-31
    

pd.period_range()

  • 创建时期范围

    pd.period_range('2019/1/1','2020/1/1',freq='M')
    
  • 频率转换

    p=pd.Period_range('2018','2019',freq='M')
    p.asfreq('D',how='start') # 由月,变为当月的第一天(start),end是当月最后一天
    
时间解释
pd.Timestamp()时间戳
单个时间点
pd.to_datetime()多个时间点
pd.DatetimeIndex()多个时——多个时间点、时间戳
pd.date_range()生成DatetimeIndex
pd.bdate_range()生成DatetimeIndex
非工作日
df.shift(2)超前、滞后——值
s.shift(2,freq='D')超前、滞后——索引
pd.Period(‘2019’,freq='M')时间段
pandas的Period
pd.period_range()PeriodIndex数据类型
创建时期范围
s1.to_timestamp()每月,转化为当月第一天
s1.to_period()每月最后一天,转化为每月

星期几、第几周

df['dayofweek']=pd.to_datetime(df['time']).dt.dayofweek
df['week']=pd.to_datetime(df['time']).dt.week

索引、切片

  • 索引

    • 适用于DataFrame
    • rng = pd.date_range('2018/1','2019/1')
    • ts=pd.Series(np.random.rand(len(rng)),index=rng)
    # 索引
    ts.loc['20180101']
    ts['20190101']
    ts['1/1/2019']
    ts[datetime.datetime(2018,2,1)]
    
    # 切片
    ts[::2] # 下标切片
    ts['2018/02']# 传入月,直接切片
    ts['1/2019']
    ts['2019-1'][::2]
    ts['2018/01/01':'2018/12/12']
    ts.loc['2018/01/01':'2018/12/12']
    
  • 重复的index

    ts.index.is_unique #判断index是否有重复值
    ts['2018/12/23']# index不唯一时,返回多个值
    ts.groupby(level=0).mean()# 对重复index分组
    

采样resample()

  • 重采样——从一个频率,转为另一个频率,且有数据的聚合

    • 降采样:高频数据–> 低频数据
    • 升采样:低频数据–> 高频数据
    ts.resample('5D').sum() #重采样
    
    # 降采样
    ts.resample('M',closed='left',label='left').mean()
    
    • closed=参数
      • 默认为None,左闭右闭——把时间区间分割
      • left:左闭右开
      • right:左开右闭
    • label=参数
      • 聚合值的index
      • 默认取 left:采样每组的第一个值的index作为,聚合值的index
      • right:采样每组的最后一个值的index作为,聚合值的index
  • 升采样

    ts.resample('T').asfreq() # 不做填充,返回NaN
    ts.resample('T').ffill() # 向上填充
    ts.resample('T').bfill() # 向下填充
    
  • 时期period的采样

    prng=pd.period_range('2018','2019',freq='M')
    pts = pd.Series(np.arange(len(prng)),index=prng)
    
    pts.resample('3M').sum() # 降采样
    pts.resample('15D').ffill() # 升采样
    
  • 聚合方法
    ts.resample('3D').mean()
    ts.resample('3D').max()
    ts.resample('3D').min()
    ts.resample('3D').median()
    ts.resample('3D').first()返回第一个值
    ts.resample('3D').last()返回最后一个值
    ts.resample('3D').ohlc()OHLC重采样
    金融领域的时间序列聚合方式
    OHLC返回多列:Open开盘,High最大值,Low最小值,close收盘

matplotlib

seaborn

LVGL移植教程(正点原子) 学习正点原子LVGL移植教程,根据视频教程写的博客 阅读详情

相关推荐

rag综述——RAG技术发展流程、最新技术挑战与系统级优化

RAG技术发展综述:本文系统梳理了检索增强生成(RAG)技术的演进历程,从2017年开放域问答中的早期探索,到2020年正式提出RAG架构并与大模型深度融合,再到2025年向系统化、可信化和智能体化发展。当前RAG面临检索可靠性、系统效率和生成可信度三大核心挑战,解决方案包括领域自适应训练、强化语义编码、迭代检索策略等优化方向。未来RAG将向GraphRAG、SafeRAG等方向发展,从单纯性能优化转向构建可控、可审计的语言系统框架,成为高可靠大模型应用的基础设施。

lovehu6686的博客 1244

Python数据格式化

formata()函数用于将数值格式化。 语法: format(value[,format_spec]) value:要格化式的值。 format_spec :格式字符串。 format_spec参数的语法格式: [[fill]align][sign][#][0][width][,][.precision][type] fill:可选,用于指定空白处填充的字符,默认为空格。 align:可选,用于指定对齐方式,需与width配合使用。 对齐方式包括: "<"——左对齐 ...

TINA_JING_LIU的博客 3892

ESP32水墨屏日历实战:低功耗自动更新与HTTPS数据解析

本文详细介绍了ESP32水墨屏日历项目的开发实践,重点讲解了低功耗自动更新与HTTPS数据解析的实现方法。通过ESP32的自动休眠功能和水墨屏的零功耗特性,结合HTTPS请求安全获取网络数据,实现了高效节能的桌面日历应用。项目代码开源,适合物联网开发者参考。

xx56789的博客 778

cp11_15_TradingStrategies(dataframe.plot.scatter)

Simple Moving Averages(SMAs) This section focuses on an algorithmic trading strategy based on simple moving averages and how to backtest such a strategy. 简单移动平均线沿用最简单的统计学方式,将过去某特定时间内的价格取其平均值。简单移动平均线...

Linli522362242的专栏 4263

Fast-LIO2代码解析 古月居

FAST-LIO,FAST-LIO2与FASTER-LIO - 古月居FAST-LIO2代码解析(一) - 古月居FAST-LIO2代码解析(二) - 古月居FAST-LIO2代码解析(三) - 古月居FAST-LIO2代码解析(四) - 古月居FAST-LIO2代码解析(五) - 古月居FAST-LIO2代码解析(六) - 古月居

li4692625的博客 2798

Android开发者必看:F2FS文件系统如何优化你的手机存储性能(附实测数据对比)

本文深入解析了F2FS文件系统如何针对闪存特性优化Android设备存储性能。通过对比ext4,F2FS采用追加写和冷热数据分离策略,将随机写转化为顺序写,显著提升写入速度并减少GC卡顿。实测数据显示,其在随机写入和SQLite事务等场景下性能提升显著,为开发者提供了优化应用IO性能的关键思路。

weixin_29248313的博客 325

Python 3 入门,看这篇就够了

Python 是一种高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 由 Guido van Rossum 于 1989 年底在荷兰国家数学和计算机科学研究所发明,第一个公开发行版发行于 1991 年。特点易于学习:Python 有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。易于阅读:Python 代码定义的更清晰。易于维护:Python 的成功在于它的源代码是相当容易维护的。一个广泛的标准库。

m0_59235945的博客 4637

从2-RSS-1U并联踝关节到双足机器人动态行走:雅可比矩阵与力矩控制实践

本文深入探讨了2-RSS-1U并联踝关节在双足机器人动态行走中的关键作用,详细解析了其设计原理、雅可比矩阵的应用及力矩控制实践。通过优化几何参数和控制算法,实现了低转动惯量、高刚度和紧凑设计,显著提升了机器人的行走稳定性和能量效率。文章还分享了从仿真到实物的跨越经验及未来优化方向。

weixin_42641998的博客 597

python3下载及安装教程

python3下载及安装教程

秋程的博客 3万+

TOGAF9.2/10 认证基础知识点概览表

(考点解析:业务场景是一种重要的技术,可以在企业架构的各个阶段使用,主要是架构愿景和业务架构,但如果需要,也可以在其他架构域中使用,以直接从业务的高级需求中派生架构的特征。“哪里”可以看作是对相关企业的界定、“为什么”可以被视为组织环境中的关键驱动因素和要素、“谁”是指确定发起人利益相关者和受业务指令影响的其他主要利益相关者,以创建企业架构,并确定他们来自企业的需求和优先级、他们与企业的关系以及彼此之间所需的工作行为。它是业务驱动和业务主导的,它结 合了所有业务线的必要努力,以实现所需的能力。

2302_81497763的博客 2081

深度学习实战:YOLOv5模型转换与部署全流程详解(PyTorch→ONNX→TensorRT→TFLite)

本文详细介绍了YOLOv5目标检测模型的完整部署流程,包括PyTorch模型训练、模型转换(ONNX、TensorRT、TFLite)、以及基于PyQt5的图形界面开发。通过实际代码示例和详细说明,帮助读者掌握工业级目标检测系统的构建方法。YOLOv5采用CSPDarknet作为骨干网络,结合PANet和SPP模块,实现了多尺度特征融合…

YOLO 473

2019最新Python3:基础语法

1. 什么是Python? Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。 Python 由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。 2. Python环境搭建 Python官网:https://www.python.org/ 下载地址:https://www.python.org/downloads/releas...

chen801090的博客 272

tsmc12:via0的spacing问题(Via0.S.1)

12nm有个via0 grid的概念,除了普通fill外,基本都有via0这一层,这一层需要与via0 grid对齐。手动调整cell的位置比较容易出这个drc,比如修m0po max length drc时。解决方法1: 替换EEQV类型cell,这种类型是专门为了修via0 Grid问题存在的。更多学习内容请关注「拾陆楼」知识星球。解决方法2: 翻转或移动。

m0_61544122的博客 1116

python最新2019_2019最新Python3:基础语法

1. 什么是Python?Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python 由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。2. Python环境搭建Python官网:https://www.python.org/下载地址:https://www.python.org/downloads/release自行安装3...

weixin_39975486的博客 79

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python3标识符_2019最新Python3:基础语法

1. 什么是Python?Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python 由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。2. Python环境搭建自行安装3. Python程序的文件头格式#!/usr/bin/python3# -*- coding: utf-8 -*-# author : liuhefei#...

weixin_39853155的博客 91

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

2019最新python3完全零基础入门视频

【课程内容】 计算机基础常识 Python语言概览、安装与运行 Python 变量、数据类型及存储 Python 常用数据类型概览 数值与字符串 列表list 字典表dict 与元组 tuple 文件与类型汇总 语句、表达式与if分支 循环语句 迭代 函数定义与参数 函数与Lambda表达式 函数应用与工具 包与模块管理及面向对象初步 面向对象编程OOP 异常处理及测试 unittest单元...

weixin_44269153的博客 1209

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

零基础学 Python3(22):2019 豆瓣电影排行

人生苦短,我用 Python 引言 从本篇的标题各位同学应该已经猜到了,本篇又到了实战环节~~~ 2019 已经快过完了,按照本文推送的时间预估,到 2020 应该还有十来天的时间,又到了各个公司出各种 2019 榜单的时间,小编这里呢,就先帮豆瓣搞一个 2019 电影评分排行榜,希望豆瓣官方看到不要打我。 郑重声明: 本文仅限用作学习等目的。 分析 还是先看一下我们要爬取的页面: 链接:...

Python3学习笔记 1114

最新《python3完全零基础入门项目实战》(2019新版)

【课程内容】计算机基础常识 Python语言概览、安装与运行 Python 变量、数据类型及存储 Python 常用数据类型概览 数值与字符串 列表list 字典表dict 与元组 tuple 文件与类型汇总 语句、表达式与if分支 循环语句 迭代 函数定义与参数 函数与Lambda表达式 函数应用与工具 ...

weixin_44955354的博客 409

python3视频教程哪个好_2019年最新零基础入门Python3:基础与实战完整版视频教程(价值279)...

适用人群1.无需任何基础想学Python的人2.对编程感兴趣的人3.希望系统学习Python编程,提高编程技能的人学到什么1.快速安装Python2.学习使用Python编写代码3.掌握Python的条件语句、函数和序列4.使用参数和返回值构建可重用函数95.使用条件语句和循环6.RPG游戏项目开发课程概述1.本课程专注于Python3教学,涵盖了Python编程语言完整的基础知识,真正的零基础入...

weixin_39880615的博客 110

#最详细# #零基础# vs2019环境下,c++调用python3的环境配置和代码实现(包含参数的传递)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接: ———————————————— 曾多次达成 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语...

lch551218的博客 6114

【Python】Python基础内容笔记整理0:基于Windows系统中的Python环境配置基础(Python3、终端测试、Visual Studio2019环境配置、PyCharm环境配置)

1 Python3 Python2和Python3有很多细节不同,这里我安的是Python3.10.2。 2 基于Windows10系统搭建Python编程环境 (1)检查是否已经安装了Python 在这个搜索框中搜索“cmd”->Enter进入 或者 Win键+R->输入cmd->Enter进入 在终端窗口输入Python->Enter,如果出现Python提示符,就说明已经安装了Python (2)安装Windows Python 如果报错指出Python.

SylviaMiller的博客 1992

Python爬虫学习笔记(工具与基础)

一、环境和工具 python3.7:参考博客https://blog.csdn.net/weixin_40844416/article/details/80889165 Pycharm2019:参考博客https://zhuanlan.zhihu.com/p/87309998 python基础:推荐廖雪峰官网或者菜鸟教程 前端基础:推荐W3school ...

qq_33360009的博客 199

Python基础入门教程:迁移到Python3!!!

Python基础入门教程:迁移到Python3!!! 到2019年底,将停止支持 Python2。至于numpy,2018年9月之后任何新功能版本都将只支持Python3。同样的还包括pandas, mat...

cpfsdzs2014的博客 473

matlab2019支持python_如何评价 MATLAB R2019a?

与MATLAB R2018b 相比,主要改进在实时编辑器,可以导出为word;sortrows对于大型矩阵速度更快;min和max函数添加了‘linear’选项;支持python 3.7;C++ API支持第三方库;MATLAB集成的Git可以与外部客户端同步;可以通过新建Project,更方便的管理代码。Release Notes for MATLAB​ww2.mathworks.cn更新:MA...

weixin_39786534的博客 1059

5月25号开学! 第13期《python3自动化测试selenium+接口》课程,python零基础也能学...

2019年 第13期《python3自动化测试selenium+接口》课程,5月25号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 本期上课时间:5月25号-7月28号,每周六、周日晚上20:30-22:30 报名费:报名费2000一人(周期2个月) 联系QQ:283340479 个人成就: 1.个人博客,百度直接搜索:上海-悠悠博客 2.个人原创微信公众号:yoyoketang 3...

weixin_30725315的博客 161

2019.7.8 Python编译成果

2019.7.8 实习任务 Python 3.7 安装完毕,可以再Pycharm中使用,打出(“Hello world”)字样。 学习基本数据结构、列表、元组、字典、集合的基本内容、区别和用处。 编写成果 1)、Hello world print("Hello world") 2)字符串截取、输出、重复、组合 string = "what a nice day" print(stri...

ding810的博客 245
上一篇: 【Python数据处理专题】-pandas库
下一篇: 【2019】数据来源
儒冠多误身
博客等级 码龄8年 12粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值