1.1.1 什么类型的数据
1.2.1 Python作为胶水
1.2.2 解决“双语言”难题
1.2.3 为何不使用Python
1.3.1 NumPy
1.3.2 pandas
1.3.3 matplotlib
1.3.4 IPython与Jupyter
1.3.5 SciPy
1.3.6 scikit-learn
1.3.7 statsmodels
1.4.1 Windows
1.4.2 Apple(OS X和macOS)
1.4.3 GNU/Linux14
1.4.4 安装及更新Python包
1.4.5 Python 2和Python 3
1.4.6 集成开发环境和文本编辑器
1.6.1 代码示例
1.6.2 示例数据
1.6.3导入约定
1.6.4术语
2.2.1 运行IPython命令行
2.2.2 运行 Jupyter notebook
2.2.3 Tab补全
2.2.4 内省
2.2.5 %run命令
2.2.6 执行剪贴板中的程序
2.2.7 终端快捷键
2.2.8 关于魔术命令
2.2.9 matplotlib集成
Python3 基本数据类型
str = '0123456789'
print(str[0:3:-1]) #截取第一位到第三位的字符
print(str[:]) #截取字符串的全部字符
print(str[6:]) #截取第七个字符到结尾
print(str[:-3]) #截取从头开始到倒数第三个字符之前
print(str[2]) #截取第三个字符
print(str[-1]) #截取倒数第一个字符
print(str[::-1]) #创造一个与原字符串顺序相反的字符串
print(str[-3:-1]) #截取倒数第三位与倒数第一位之前的字符
print(str[-3:]) #截取倒数第三位到结尾
print(str[:-5:-3]) #逆序截取,每个两位取值
# 方法一
numStr = input('请输入一串数字:\n')
len=numStr.__len__()
while len !=0:
print(numStr[len-1],end='')
len -= 1
# 方法二
numStr = input('请输入一串数字:\n')
print(numStr[::-1])
2.3.1 语言语义
2.3.2 标量类型
2.3.3 控制流
3.1.1 元组
3.1.2 列表
3.1.3 内建序列函数
3.1.4 字典
链接:
Python中dict字典使用方法
Python字典及基本操作
3.1.5集合
3.1.6 列表、集合和字典的推导式
3.2.1 命名空间、作用域和本地函数
3.2.2 返回多个值
3.2.3 函数是对象
3.2.4 匿名(Lambda)函数
3.2.5 柯里化:部分参数应用
3.2.6 生成器
3.2.7 错误和异常处理
3.3.1 字节与Unicode文件
4.1.1 生成ndarray
4.1.2 ndarray的数据类型
4.1.3 NumPy数组算术
4.1.4 基础索引与切片
4.1.5 布尔索引
4.1.6 神奇索引
4.1.7 数组转置和换轴
4.3.1 将条件逻辑作为数组操作
4.3.2 数学和统计方法
4.3.3 布尔值数组的方法
4.3.4 排序
4.3.5 唯1值与其他集合逻辑
4.7.1 一次性模拟多次随机漫步
5.1.1 Series
5.1.2 DataFrame
import pandas as pd
# 方法1:字典创建
data = {"name":['google','baidu','yahoo'],"marks":[100,200,300],"price":[1,2,3]}
f1 = pd.DataFrame(data)
# 这是定义一个 DataFrame 对象的常用方法——使用 dict 定义
f2 = pd.DataFrame(data,columns=['name','price','marks'])
# 在 DataFrame 中,columns 跟字典键相比,有一个明显不同,就是其顺序可以被规定
f3 = pd.DataFrame(data,columns=['name','marks','price'],index=['a','b','c'])
# DataFrame 数据的索引也能够自定义
data2 = {'lang':{'first':'python','second':'java'},'price':{'first':5000,'second':2000}}
f4 = pd.DataFrame(data2)
# DataFrame 的方法,除了上面的之外,还可以使用“字典套字典”的方式
# 方法2:列表创建
data3 = [[1,2,3,4],['a','b','c','d']]
f5 = pd.DataFrame(data3,columns=list('ABCD'),index=list('ab'))
# 方法3:单个元素的字典直接转DataFrame
# 3.1:键值为index
data4 = {"name":"xiaoming","age":18,"sex":"male"}
f6 = pd.DataFrame(pd.Series(data4),columns=["Value"])
f7 = pd.DataFrame.from_dict(data4,orient="index")
# 3.2:键值为column
f8 = pd.DataFrame.from_dict(data4,orient="index").T
f9 = pd.DataFrame(data4,index=[0])
import pandas as pd
data = {"name":['google','baidu','yahoo'],"marks":[100,200,300],"price":[1,2,3]}
f1 = pd.DataFrame(data)
f1.columns #查看列
f1.index #查看索引
f1.dtypes #查看每列的数据类型
f1.info() #查看各列的数据类型
f1.shape #查看行列的大小
f1.size #查看总计有多少个单元格
len(f1) #查看行数
f1.head() #返回前几行
f1.tail() #返回后几行
f1.rename(columns={'price':'rank'},inplace=True) #修改列名
f1.replace({200:250}) #替换值
f1['rank'].replace({3:4}) #指定列替换
f1['rank'].value_counts() #查看指定列中元素的计数
f1.sort_values(by=['name','rank'],ascending=[False,True]) #依据指定列进行排序,默认是升序
f1.describe() #查看描述性统计的相关信息
f1.describe(include='all')#查看描述性统计的相关信息
f1['rank'].sum() #对指定列进行运算,max/min/mean/sum/std
import pandas as pd
data = {"name":['google','baidu','yahoo'],"marks":[100,200,300],"price":[1,2,3]}
f1 = pd.DataFrame(data)
f1['class'] = 1 #增加列,每次只能增加1列
f1.loc[3] = ['tencent',400,2,6] #增加index为3的一行数据
del f1['price'] #删除price列
f1.drop(labels='name',inplace=True,axis=1) #删除name列
f1 = f1.drop(2,axis=0) #删除index=2的一行数据
# 缺失值
data = {"name":['google','baidu','yahoo',None,'tencent'],
"marks":[100,200,300,400,None],
"price":[1,2,3,None,4]}
f1 = pd.DataFrame(data)
pd.isnull(f1) #返回所有数据的检测结果
pd.isnull(f1['price']) #返回某列数据的检测结果
f1.dropna(axis=0,how="any",thresh=None,subset=['name','price'],inplace=False)
# any:如果存在任何NA则放弃该标签
# all:如果所有的值为NA,才放弃该标签
# thresh=n,保留至少有n个非NA数据(行列依据指定的来)
# subset:在某些列的子集中选择出现缺失值的列删除,不在子集中的出现缺失值的列不删除
# inplace:筛选过缺失值的新数据是存在副本还是直接在原数据修改
f1.fillna(value=-1) #用-1填充缺失值
len(f1.loc[(f1['price'].isnull(),'price')]) #查看某列缺失值的个数
# 文本数据(字符串)处理
f2 = pd.Series(['A','B','C','Aaba','Baca','CABA','dog','cat'])
f2.str.strip() #去除收尾空格
f2.str.upper() #转为大写
f2[f2.str.strip().str.endswith("a")]
f1['name'].str.split(" ") #对指定列数据进行分割
f1['name'].str.split(" ",expand=True) #使用expand方法,把分割出来的数据单独生成一列
f1['name'].str[:3] #使用[]对字符串进行切片提取
data = {"name":['google','baidu','yahoo',None,'tencent'],
"marks":[100,200,300,400,None],
"num":['S1','S2','S3','S4','S5'],
"price":[1,2,3,None,4]}
f1 = pd.DataFrame(data)
# 索引
# set_index设置多重索引
f2 = f1.set_index(keys=['name','marks','num','price'],append=False,drop=False)
# append=False(是否将原索引保存)
# drop=False(是否保留转换为索引的原数据)
# sort_index 将索引进行排序
f1.sort_index(na_position="last",inplace=True)
# 切片(slicers)对多重索引操作
f1.loc[(slice(0,2),['google'],slice(None)),:]
# 使用idx替代slicers
idx=pd.IndexSlice
f1.loc[idx[0:500,['google'],['marks','price']],idx['price']]
# reset_index 还原索引
f3 = f2.reset_index(drop=True)
# 索引提取(loc和iloc)
# .loc-显示索引,依据名字(标签)进行索引
f1.loc[0] #提取index名字为0的数据
f1.loc[:5] #提取索引名为5的行
f1.loc[{1,2,4}] #提取索引名为1,2,4的行
f1.loc[f1['price']>2] #筛选price>2的数据
f1.loc[:2,['name','price']] #选择前十行的指定两列数据
# .iloc-隐式索引,依据位置查找数据
f1.iloc[2:5] #此处2:5是索引,左闭右开的原则
f1.iloc[[1,2,4]] #提取index为1,2,4的行
f1.iloc[:2,[0,1]] #提取前2行,指定索引为0,1的两列数据
f1.iloc[[0],f1.columns.get_loc('name')] #使用get_loc获取索引
data = {"name":['google','baidu','yahoo','baidu','google'],
"marks":[100,200,300,400,None],
"num":['S1','S2','S3','S4','S5'],
"price":[1,2,3,None,4]}
f1 = pd.DataFrame(data)
# 数据查询(过滤)
f1[(f1['marks']>200)|(f1['price']>1)] #条件为或
f1[(f1['marks']>200)&(f1['price']>1)] #条件为和
f1.loc[(f1['marks']>200)&(f1['price']>1)]
f1[~(f1['marks']>200)&(f1['price']>1)] #~代表给定条件相反的数据
# 修改
f1.loc[f1['name'] == 'baidu','name']='Baidu' #只是修改了值,并未修改数据类型
f1['name'] = f1['name'].map({'baidu':'Baidu'})
# 分组计算
f1.groupby("name").size() #分组查看每组大小
f1.groupby("name").groups #查询每个组下数据索引
len(f1.groupby("name")) #查询每个小组的总数
# 统计计算
f1.groupby("name")['price'].sum() #单个统计量
f1.groupby("name")['price'].agg([np.min,np.max,np.mean,np.std]) #多个统计量
f1.groupby("name").agg([np.min,np.max,np.mean,np.std]) #对所有列求相同统计量
f1.groupby("name").agg({'price':np.mean,'marks':[np.size,np.mean]})#不同列求不同统计量
# 标准化数据
z_score=lambda s:(s-s.mean())/s.std() #先定义标准化函数
f1[['price','marks']].transform(z_score) #标准化数据不同有缺失,处理之前要把缺失值填充为0
# 过滤分组数据
f1.groupby("name").filter(lambda g:len(g)>1) #过滤掉记录有1的数据
f1.groupby("name").filter(lambda g:len(g)>1)['name'].value_counts().min() #验证过滤出来的数据是否正确
f1.groupby("name").filter(lambda g:g['marks'].mean()>100) #过滤指定条件的数据
data = {"name":['google','baidu','yahoo','baidu','google'],
"marks":[100,200,300,400,None],
"num":['S1','S2','S3','S2','S3'],
"price":[1,2,3,None,4]}
data2 = {"name":['google','baidu'],
"marks":[100,500],
"num":['S1','S2'],
"price":[1,4]}
data3 = {"name":['google','baidu'],
"country":['USA','China']}
f1 = pd.DataFrame(data,)
f2 = pd.DataFrame(data2)
f3 = pd.DataFrame(data3)
# 表连接
pd.concat([f1,f2]) #数据拼接
pd.merge(f1,f3,on='name') #主键相同进行内连接
pd.merge(f1,f3,on=['name','name']) #多个主键进行内连接
pd.merge(f1,f3,how='left',on=['name','name']) #多个主键进行左连接
pd.merge(f1,f3,how='right',on=['name','name']) #多个主键进行右连接
pd.merge(f1,f3,left_index=True,right_index=True) #两表无主键,使用index进行连接
pd.merge(left,right,left_on=['key1','key2'],right_on=['key3','key4']) #复合主键连接
pd.merge(left,right,left_index=True,right_on=['key3','key4']) #仅一表有主键,内连接
# 数据透视
pd.pivot_table(f1,values=['price','marks'],columns=['name'],aggfunc=[np.mean,np.max])
pd.crosstab(f1['name'],f1['num'],margins=True) #计算因子的频率,margin=True会加一个合计
#方法1
pd.read_excel(fileName).values
#方法2
np.array(pd.read_excel(fileName))
5.1.3 索引对象
5.2.1 重建索引136
5.2.2 轴向上删除条目138
5.2.3 索引、选择与过滤140
5.2.4 整数索引144
5.2.5 算术和数据对齐145
5.2.6 函数应用和映射150
5.2.7 排序和排名152
5.2.8 含有重复标签的轴索引155
5.3.1 相关性和协方差159
5.3.2 唯1值、计数和成员属性161
6.1.1 分块读入文本文件
# 方法一:read_excel
import pandas as pd
path=r'D:\iMajorSkill\dataSets\defaultofcreditcardclients2.xls'
data=pd.read_excel(path)
# 方法二:read_table
dataset=pd.read_table(filePath,sep=' ',header=0)
# sep指定分隔符,header=0代表首行为表头
# 方法三:网络读取
import pandas as pd
data_url = "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv"
#填写url读取
df = pd.read_csv(data_url)
data.to_csv(filepath, encoding = 'utf-8', index = False)
# index=False表示导出时去掉行名称,如果数据中含有中文,一般encoding指定为‘utf-8’
6.1.2 将数据写入文本格式
6.1.3 使用分隔格式
6.1.4 JSON数据
6.1.5 XML和HTML:网络抓取
6.2.1 使用HDF5格式
6.2.2 读取Microsoft Excel文件
连接:缺失值处理python实现
7.1.1 过滤缺失值189
7.1.2 补全缺失值191
7.2.1 删除重复值194
7.2.2 使用函数或映射进行数据转换195
7.2.3 替代值197
7.2.4 重命名轴索引198
7.2.5 离散化和分箱199
7.2.6 检测和过滤异常值202
7.2.7 置换和随机抽样203
7.2.8 计算指标/虚拟变量204
7.3.1 字符串对象方法
7.3.2 正则表达式
7.3.3 pandas中的向量化字符串函数
8.1.1重排序和层级排序
8.1.2 按层级进行汇总统计
8.1.3 使用DataFrame的列进行索引
8.2.1 数据库风格的DataFrame连接
8.2.2 根据索引合并
8.2.3 沿轴向连接
8.2.4 联合重叠数据
8.3.1 使用多层索引进行重塑
8.3.2 将“长”透视为“宽”
8.3.3 将“宽”透视为“长”
9.1.1 图片与子图
9.1.2 颜色、标记和线类型
9.1.3 刻度、标签和图例
9.1.4 注释与子图加工
9.1.5 将图片保存到文件
9.1.6 matplotlib设置
9.2.1 折线图
9.2.2 柱状图
9.2.3 直方图和密度图
9.2.4 散点图或点图
9.2.5 分面网格和分类数据
10.1.1 遍历各分组
10.1.2 选择一列或所有列的子集
10.1.3 使用字典和Series分组
10.1.4 使用函数分组
10.1.5 根据索引层级分组
10.2.1 逐列及多函数应用
10.2.2 返回不含行索引的聚合数据
10.3.1 压缩分组键
10.3.2 分位数与桶分析
10.3.3 示例:使用指定分组值填充缺失值
10.3.4 示例:随机采样与排列
10.3.5 示例:分组加权平均和相关性
10.3.6 示例:逐组线性回归
10.4.1 交叉表:crosstab
11.1.1 字符串与datetime互相转换305
import datetime
datetime.datetime.now().isocalendar()
# (2020,13,6)返回参数分别是年,第几周,星期几
11.2.1 索引、选择、子集
11.2.2 含有重复索引的时间序列
11.3.1 生成日期范围
11.3.2 频率和日期偏置
11.3.3 移位(前向和后向)日期
import pandas as pd
date_list = [str(x)[:10] for x in pd.Series(pd.date_range('6/1/2020',periods=6,freq='M'))]
date_list
11.4.1 时区的本地化和转换
11.4.2 时区感知时间戳对象的操作
11.4.3 不同时区间的操作
11.5.1 区间频率转换
11.5.2 季度区间频率
11.5.3 将时间戳转换为区间(以及逆转换)
11.5.4 从数组生成PeriodIndex
11.6.1 向下采样
11.6.2 向上采样与插值
11.6.3 使用区间进行重新采样
11.7.1 指数加权函数
11.7.2 二元移动窗口函数
11.7.3 用户自定义的移动窗口函数
12.1.1 背景和目标
12.1.2 pandas中的Categorical类型
12.1.3 使用Categorical对象进行计算
12.1.4 分类方法
12.2.1 分组转换和“展开”GroupBy
12.2.2 分组的时间重新采样
12.3.1 pipe方法
13.2.1 Patsy公式中的数据转换
13.2.2 分类数据与Patsy
13.3.1 评估线性模型
13.3.2 评估时间序列处理
13.5 继续你的教育
14.1.1 纯Python时区计数
14.1.2 使用pandas进行时区计数
14.2.1 测量评价分歧
14.3.1分析名字趋势
14.5.1 按职业和雇主的捐献统计
14.5.2 捐赠金额分桶
14.5.3 按州进行捐赠统计
XGBoost官方文档