python 数据格式

变量命名规范

1:区分大小写
2:只能包含字母、数字、下划线
3:不能以数字开头
4:可以用python关键字作为变量名,但最好不要这么干

赋值语句

i=2
i=j=2
a,b,c=1,2,3
a,b=b,a

通用函数

有确定性的数据结构可以用in, not in ,len, min, max
有序对象可以用索引

序列结构(list, tuple,str 等有顺序关系的数据类型)支持索引、切片、迭代、拆包式赋值、重复运算符(*)、专有函数

a[2] #索引
a[start:stop:step] # 切片,不包括stop
b,c,d=a # 拆包
a*3  or a+[1,2,3] or a+(1,2,3) # 重复运算

len(a) # 长度
sorted(a) # 不改变原序列 对应的可变数据类型有a.sort()
reversed(a) # 返回的是迭代器
enumerate(a) # 迭代器
zip(a,b) # 迭代器

3 in a # 包含
min(a), max(a)	
del a[2]
a.count(10) # 统计10出现的次数
a.index(10) # 第一次出现10处的索引值
a>b or a<b or a==b a != b#比较第一个不同处的大小
a[2] #显示索引为2的数据

内置可变数据类型

list

a=[1,2,3]

a.append() # 合并,仅仅是讲数据放到最后一位
a.extend([1,2,3]) # [1,2,3,1,2,3]
a.insert(ind,data) # 插入

a.pop(ind) # 根据下标删除,没有ind默认删除最后一个数据,有返回值
a.remove() # 根据内容删除第一个符合条件的数据

range(1,10,2)# [1,3,5,7,9]不包含stop

append,extend,insert,pop,remove,len,sorted,reversed,enumerate,zip,in,min,max,del,count,index

dict

a={"name": 'sxj', "age": 18, 2:3} # key必须可以hash
a['name']
a['age']=18 # 添加
a.pop('name')
del a['name']

pop,del,len,in

set

a={1,2,3} # 支持集合运算,并| 交& 差- 对称差分^

a.add(4)

a.remove(4)

add,remove,len,,in,min,max

内置不可变数据类型

tuple

a=(1,2,3) or a=1,2,3
因为不可改所以没啥函数,只有序列通用函数
len,sorted,reversed,enumerate,zip,in,min,max,del,count,index

int float complex bool str frozenset

bool类型是int的子类
a='name' or a ="name" or a='''name'''  # 转义字符\  \\
' '.join(['n','a']) #字符串合并
a+'1' 

a.strip()
a.upper() or a.lower() # 改变大小写
a.sort() # 排序

第三方包数据类型

numpy

ndarray 代表一种特殊的数据结构-n维数组,有广播机制(±*/可以向长度不一致的轴向循环补齐)

生成数组
np.arange(1,10)
np.array([1,2,3])
np.zeros(5)  or np.zeros(shape=(5,),dtype=np.int)  # 5个0
np.ones(5) # 5个1
np.full(3,2) #3个2

数组切片与读取
a[start:stop:step]
a[[1,3,6]]

纬度的改变
b=a # 浅拷贝  共享内存空间
b=a.copy() # 深拷贝,内存空间不同,相互独立

a[:,np.newaxis] # 添加一个新纬度,本身没变
a.reshape([3,3]) # 改变纬度,本身没变
a.resize([3,3]) # **就地修改**,没有返回值
a.swapaxes(0,1) # 轴调换,本身没变
a.flatten() # 将多维数组转换成一维数组,本身没变
a.tolist() # 转换成list,本身没变
a.astype(np.float) # 重设数组元素的数据类型,本身没变

a1,a2,a3=np.split(a,[3,5]) # 在3,5这两个位置拆分
a1,a2=np.vsplit(a,[2]) # 纵向拆分
np.concatenate((a,b),axis=0) # 在0轴连接,其他轴必须大小相等
np.vstack([a,b]) # 纵向合并,必须列数相同
np.hstack([a,b]) # 必须行数相同

数据的更改
a*10 # 
np.add(a,10)
np.delete(a,2) # 删除第二个数据
np.insert(a,2,88) # 在第二个索引出插入88

缺失值的处理
np.isnan(a) # 返回每个元素的TRUE, FALSE
np.any(np.isnan(a)) # 判断是否至少有一个缺失值
np.all(np.isnan(a)) # 判断是否所有都是缺失值
np.nansum(a) # 除了nan之外的和
np.sum(a) # 求和,如果有nan,返回值是nan

排序
np.sort(a,axis=0) # 本身不变
np.argsort(a) # 返回排序后的inex

属性计算
a.shape
a.ndim
a.size
np.sum(a) # np中的计算是向量计算,速度更快

pd.series

pandas定义的一种key-value型数据结构,有两种index,一种显式一种隐式

import pandas as pd
a=pd.Seriex([1,2,3],index=['a','b',c''])
a=pd.Series(10,index=['a','b','c']) # 只有一个元素的时候进行循环补齐

查看
a.index # 返回类型为index
a.values # 返回类型为array
a['b'] or a [1]
a[['b','c']] or a[0:1]
'a' in a

更改
a.reindex(['a','c','b']) # 只是更改显示顺序,如果是新的index,添加nan,本身不变

pd.dataframe

pandas提供的类似关系表的数据结构

三种生成dataframe的方法
a=dataframe([[1,2,3],[4,5,6]],columns=[‘col1’,‘col2’,‘col3’],index=[‘a’,‘b’])

b=dataframe([[1.1,1.2,1.3],[2.1,2.2,2.3]]) # 先构建数据,然后添加index,column
b.columns=['col4','col5','col6']
b.index=['c','d']
or b.rename(columns={'col4':'newname'...},index={},inplace=True) # 需要注意rename不加inplace不改元数据,只是改变了返回值
or b.rename(index=str) #将index设置成str
or b.rename(str.lower,axis='columns')


c=dataframe(columns=['a','b']) #建立了一个空的dataframe
c.loc[c.shape[0]]=[1,2] #添加行
c['newname']=.... #添加列

导入与导出

df.to_csv()
pd.read_csv()
df.to_excel()
pd.read_excel()

查看数据

df.head(2)
df.tail(2)
df.index
df.columns
df.columns.size
df.shape

df[['c1',c2']] or df.c1
df.loc[:,'c1':'c3']
df.iloc[:,0:2]

df[df.c1>100][['c1','c2']]
df.loc[df.c1>100,['c1','c2']

更改数据

df.reindex(index=[],columns=[],fill_value=100) # 只是调整index的顺序,如果有新的添加100
df.drop(['i1'],axis=1,inplace=True) # 本身不变
del df['c1'] # 只能删除列
df.loc['i1','d1']=0
a.loc[a.shape[0]]=[1,2] #添加行
a['newname']=...#添加列
a.astype(np.int32) # 改变数据类型
a.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad', axis=None)
a.set_index('column_name',inplace=True)
df.stack() #建立多级索引
df.unstack() #撤销多级索引

算术运算
(+ - * / )是将对应索引的运算,不对应的索引取并,赋值‘nan’,如果不想用‘nan’填充,可以用a.add(b,axis,fill_value=0),sub,mul,div,可以将dataframe和series进行运算,(±*/)可能会出问题
运算数可以是series,dataframe,constant,constant就是全加同一个数,series是(axis=0)每行加不同的数
好多的运算可以用numpy来操作

df1+df2  # 行和lieder显式index为依据对元素计算,不足部分NAN,series参与计算的时候默认当成一行
df1.add(df2,fill_value=10,axis=1) # 对应元素计算,不足部分用fill_value, axis 调整按行还是按列计算  -sub * mul / div
df.cumsum() 
df.rolling(2,axis=1).sum()
df.cov()  # 协方差矩阵
df.corr() # 相关系数矩阵
df.T  # 转置
df.idxmax(axis=0,skipna=True) #最大值对应的索引
df.apply(lambda x: x.sum(),axis=0) 

缺失值

df.empty  # 判断是否为空
df.isnull() #判断每个元素是否为空
df.notnull() #判断每个元素是否为非空
df.dropna(axis='index') # 含有空的行被删除
df.fillna(0) #用0来补充所有的缺失值
df.fillna(method='ffill') #向前填充缺失值  bfil 向后填充缺失值

排序

a.reindex([],axis=0,method=,fill_value=np.nan)#对行重排序,没有的默认‘nan’ reindex生成新的dataframe,原来的不变,axis=0是对index处理,1对columns处理,na_position ='last' or 'first',默认‘last’
a.sort_index(axis=0,ascending=False,na_position='last',inplace=True) 
a.sort_values(by=[],axis=0,ascending=False,na_position='first',inplace=True)
a.reset_index(drop=True,inplace=True) 仅重新生成索引(inplace)
df.set_index([],inplace=True)将某一列设成index,原有的index消失

统计

df.describe() # 按列的统计值 count,mean,std,min,25%....%75,max
df.count()
df.mean()

分组统计

df.groupby('c1')['c2'].mean() #按c1分组对c2进行平均
df.groupby('c1')['c2'].aggregate(['mean','sum','max',np.median])  # 多种计算
df.groupby('c1').apply(myfunc) # 自定义的处理函数

df的合并

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True) #尽量用这个,可以行,也可以列
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False) # 返回的格式:on,left1,left2,right1,right2, 只能行合并
a.append(other, ignore_index=False, verify_integrity=False)#列取并集,index单纯叠加 摞起来, 即将被废弃
a.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False) 

例子

a=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['s1','s2','s3'],columns=['a','b','c'])
	    a  b  c
	s1  1  2  3
	s2  4  5  6
	s3  7  8  9
b=pd.DataFrame([[10,11,12],[13,14,15],[16,17,18]],index=['s1','s2','s4'],columns=['a','b','d'])
	     a   b   d
	s1  10  11  12
	s2  13  14  15
	s4  16  17  18
merge  空,因为列名相同的没有相同的值
concat      a   b    c     d
		s1   1   2  3.0   NaN
		s2   4   5  6.0   NaN
		s3   7   8  9.0   NaN
		s1  10  11  NaN  12.0
		s2  13  14  NaN  15.0
		s4  16  17  NaN  18.0
append

移位

a.shift(n,axis=0)

选行
& | and or
两侧是数值的时候,& |进行位运算, and or根据是不是0输出
两侧是布尔值的时候,一样
注意在dataframe中选择切片的时候一定要用& |

a.loc[() & (),...]
a.loc[() | (),...]

去重
a.drop_drop_duplicates(col_name, ‘first’, inplace=True)

日期与时间

python中,与时间处理相关的模块有:time, datetime, calendar
时间的表述格式:时间戳, 格式化的字符串, 元组(struct_time共九种元素) ,另外python的time模块是调用C库实现的,所以在不同的平台可能会有所不同。

以time举例:
时间戳(timestamp):从1970年1月1日0点到现在的秒数,time(),clock() 返回timestamp
世界协调时(UTC):在中国UTC+8
DST:夏令时
struct_time: gmtime(), localtime(), strptime()返回struct_time
string: format: %Y, %m %d, %H %M %S

在这里插入图片描述

import time
t = time.gmtime() #返回格林威治时间 struct_time
t = time.localtime() #返回当地时间struct_time  tuple
t.tm_year # 返回年

t = time.time()  # timestamp

time.localtime(t) # timestamp ----> struct_time
time.gmtime(t) # timestamp ----> utc
time.mktime(time.localtime()) # struct_time---->timestamp
time.strftime(format,time.localtime()) # struct_time ----> string
time.strptime(str_time,format) # string ---->struct_time


time.sleep()  # 程序休眠时间
time.clock() # cpu的累计时间

matplotlib指定时间为datetime格式。默认无时区操作,除非指定或者特殊操作

datetime.utcnow() utc时间
datetime.now()  当地时间
datetime.strptime()
datetime.strftime()

转换时区
tz_utc = timezone(timedelta(hours=8))
current_time_utc_8 = datetime.utcnow().replace(tzinfo=tz_utc)

pandas中的时间

import pandas as pd
pd.period_range('2019-01',periods=10,freq='D') #返回periodindex

随机数

一次生成一个随机数
import random
random.seed(3) #设置种子数,如果不设置每次生成的随机数不一样,如果设置了,生成的随机数是一样的

random.randint(1,100) #随机生成一个整数
random.uniform(-10,10) #随机生成一个实数
round(random.uniform(-10,10),2) # 小数点后保留两位

一次生成一个随机数组
import numpy as np
rand = np.random.RandomState(32) # 生成随机变量的生成器,32是种子数
rand.randint(0,10,(3,6)) # 3*6  范围在0-10之间的随机整数
rand.rand(5) # 服从均匀分布的实数
rand.randn(5) # 服从正态分布的实数
np.linspace(0,10,20) # 0-10之间20个等距数列

特殊数据类型

None  # python 提供的特殊数据类型,不能参加算术运算
np.nan 是np,pd提供的数据类型,属于float,可以参加算术运算

查看数据

type(x) # 显示x的数据类型
isinstance(x,int) # 查看x是否是int类型的
del x  #删除已定义变量
dir()  # 查看所有已定义变量
import keyword
keyword.kwlist # 查看python关键字

日期与时间

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值