Python学习之路

本书全面讲解Python编程,从语言特点、基本语法到数据类型,深入探讨字符串、数字、复合数据类型和控制结构。重点讲解了数据处理,包括函数、代码复用、文件操作,并详细阐述了Pandas和Numpy在数据分析中的应用,涵盖数据读取、数据结构、数据查询、数据处理和统计分析等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python学习之路

第一章 背景&基础知识

一、Python语言的特点

在这里插入图片描述

二、python基本语法元素

在这里插入图片描述在这里插入图片描述

1. 数据类型-字符串类型

  1. 切片:利用[N:M]格式进行切片时,切取N但不包含M的连续字符
  2. 字符串长度:len()

2. 语句元素

  1. 引用(import):调用具体功能
import <功能库名称>
<功能库名称>.<函数名称>()
  1. 赋值(=):同步赋值
a,b = b,a+b

3.基本输入输出函数

  1. 输出函数(eval):以Python表达式的方式解析并执行字符串
value = eval(input("请输入要计算的数值:"))*2
print(value)
  1. 输出函数(print):混合输入字符串与变量值
a = 1234  b = 5678
print("数字{}和数字{}的和是{}".format(a,b,a+b))
  1. 输出函数(print):对end参数进行赋值
print(<待输出内容>,end = "<待输出的结尾>")

程序的语句元素

表达式

用于产生或计算新数据值。由数据和操作符等构成。

赋值语句

用=表赋值

<变量> = <表达式>
<变量1>,<变量2>...=<表达式1>,<表达式2>

引用

#引用
import <功能库名称>
#调用
<功能库名称>.<函数名称>( )

其他语句

  • 分支语句
#单分支
if  <条件>:
	<语句块>
  • 循环语句
while<条件>:
	<语句块1>
	<语句块2>

基本输入输出函数

input( )函数

<变量> = input (<提示性文字>)

ps: 注意返回值是字符型

eval( )函数

以Python表达式的方式解析并执行字符串,将返回结果输出。经常与input搭配使用。

eval(<字符串>)
#与input搭配
<变量> = eval(input(<提示性文字>))

print()函数

  • 输出字符串
print (<待输出字符串>)
  • 输出变量
print<变量1>,<变量2>,......
  • 混合输出
print<输出字符串模板>.format(<变量1>,<变量2>......)
  • 对end函数赋值
print (<待输出内容>,end = "<增加的输出结尾>")

第三章 基本数据类型:凯撒密码

在这里插入图片描述

数字类型

整数类型

  • 默认十进制
  • 二进制0b 0B,八进制0o 0O,十六进制0x 0X
  • 不同进制之间可以直接运算

浮点型

  • 必须带小数部分,0也可以
  • 一般表示&科学计数法:e = a*10的b次方

复数

  • a + bj b为1时也不可省略
  • 用虚数.real和虚数.imag分别获得其实数和虚数部分

运算

数值运算操作符
  • 以上所有操作符都可以与= 相连接,形成增强赋值操作符op (x op y 等价于 x = x op y)
  • 数值运算结果可能改变结果的数据类型。
    在这里插入图片描述
数值运算函数

在这里插入图片描述

字符串类型及格式化

分类

  • 单行字符:用单引号或双引号
  • 多行字符:用三个单引号或三个双引号

转义符

\n 换行
\0 空格
\ 反斜杠
’ 、’’ 反单引号双引号
\t 制表符

索引

  • 左端从0开始,反向为负。
  • 字符串均以unicode编码储存
<字符串或字符串变量>[序号]

切片

<字符串或字符串变量>[N:M]
#不包含m

format( )方法

<{<>}模板字符串>.format(<逗号分隔的参数>)

槽中的参数:
{ <参数序号从0开始>:<填充><对齐><宽度>,<.精度><类型>}
在这里插入图片描述

字符串类型的操作

字符串操作符

在这里插入图片描述

字符串处理函数

字符串处理方法

在这里插入图片描述

类型判断和类型间转换

  • type( x )对x进行类型判断
  • 数字类型转换可以通过数值运算操作符或内置转换函数
    在这里插入图片描述

第四章 程序控制结构:猜数字游戏

在这里插入图片描述

程序的基本机构

流程图

在这里插入图片描述

分类

  • 顺序结构
  • 分支结构
  • 循环结构

程序的分支结构

单分支结构:if 语句

if <条件>:
	语句块

二分支结构:if - else 语句

#标准表达
if <条件>:
	<语句块1>
else<语句块2>
#简洁模式
<表达式1> if <条件> else <表达式2>

多分支结构:if-elif-else 语句

if <条件1>:
	<语句块1>
elif<条件2><语句块2>
...
else<语句块n>
  • 判断条件及组合
    在这里插入图片描述
  • 除0和空外,其余都为true
  • not and or

程序的循环结构

遍历循环:for

for <循环变量> in <遍历结构><语句块>
# 扩展模式
for <循环变量> in <遍历结构><语句块1>
else<语句块2>
  • 遍历结构可以是字符串、文件、range(<循环次数>)函数或组合数据类型。
  • else 语句只有在循环正常执行之后才执行

无限循环:while

while <条件>:
	<语句块>
# 扩展模式
while <条件>:
	<语句块1>
else<语句块2>
  • else 语句只有在循环正常执行之后才执行

循环控制:break 和 continue

  • continue 只结束本次循环
  • break 具备结束循环的能力

程序的异常处理

try:
	<语句块1>
except:
	<语句块2>

可处理输入及程序运行异常

第五章 函数和代码复用:软文的诗词风

在这里插入图片描述

函数的基本使用

  • 函数定义
def <函数名>(<参数列表>):
	<函数体>
return <返回值列表>
  • 函数使用
<函数名>(<实际赋值参数列表>)

函数的参数传递

  • 可选参数传递
def <函数名>(<非可选参数>,<可选参数>=<默认值>):
	<函数体>
return <返回值列表>
  • 参数名称传递
<函数名>(<参数名> = <实际值>)
  • 函数的返回值
    可以0个 1个 或多个
    可使用一个或多个变量来保存多返回值的结果

变量的作用域

局部变量

仅作用于函数内部

全局变量

跨越多个函数,在函数里使用全局变量需使用global

代码复用

耦合度

  • 紧耦合
  • 松耦合

第六章 组合数据类型:文本词频统计

在这里插入图片描述

组合数据类型的基本概念

分类

  • 集合:元素集合 eg 集合
  • 序列:元素向量 eg 字符串、元组、列表
  • 映射:“键-值”数据项的组合 eg 字典

集合类型概述

  • { } 或 set( )
  • 无序组合
  • 元素唯一
  • 元素类型必须是固定的,即列表、字典等无法作为元素
  • 4个操作符
    在这里插入图片描述
  • 常用的一些函数和方法
    在这里插入图片描述

序列类型概述

  • 一维元素向量
  • 元素之间存在顺序关系,通过序列访问
  • 通用操作符和函数
    在这里插入图片描述

映射类型概述

  • “键-值”对的映射关系
  • 元素之间是无序的,通过键值访问

列表类型

定义

  • [ ] 或 list ( )
  • 包含0个或多个元组的有序序列
  • 无元素限制,类型可以不同

遍历

  • 可以使用for对元素进行遍历
for <循环变量> in <列表变量><语句块>
  • 可使用切片
<列表或列表变量>[N:M]<列表或列表变量>[N:M:K]#K 表步长

列表类型的操作

操作函数

在这里插入图片描述

操作方法

在这里插入图片描述

赋值

  • 用 = 不是拷贝,拷贝是copy( ),等号是关联引用,指向同一套内容
  • 使用索引配合等号才可赋值

字典类型

定义

  • { } 或 dict( )
  • “键-值”映射
{<1>:<1>,<2>:<2>,...,<键n>:<值n>}

索引

<> = <字典变量> [<>]

字典类型的操作

操作函数

在这里插入图片描述

操作方法

在这里插入图片描述

遍历

  • 遍历返回索引值,值须通过get.( )获得
for <变量名> in <字典名><语句块>

第七章 文件和数据格式化

在这里插入图片描述

第八章 python计算生态

在这里插入图片描述

第九章 Python标准库概览

在这里插入图片描述

第十章 Python第三方库概览

在这里插入图片描述

第十一章 python第三方库纵览

在这里插入图片描述

第十二章 Python pandas和numpy数据分析

参考资料链接

入门介绍

numpy

用来存储和处理大型矩阵。eg 矩阵运算、矢量处理、N维数据变换。

pandas

提供数据模型和快速便捷处理数据的函数和方法。

pandas读取数据

读取纯文本文件

读取csv文件
#读取
a = pd.read_csv (path)
#查看前几行
a.head()
#查看数据行数、列数)
a.shape
#查看列名列表
a.columns
#查看索引列
a.index
#查看每列数据类型
a.dtypes
读取txt文件:指定分隔符,列名
a = pd.read_csv(
	fpath,
	sep = '\t', #列分符
	header = None, #无标题行
	names = ['列名1','列名2',......''] 
)

读取excel文件

a = pd.read_excel(path)

读取mysql文件

import pymysql
conn = pymysql.connect(
	host = '127.0.0.1',
	user = 'root',
	password = '1234',
	database = 'girls',
	charset = 'utf8'
)
a = pd.read_sql("select * from <table>",con=conn ) 

pandas数据结构

import pandas as pd
import numpy as np

dataframe

定义

二维数据,整个表格,多行多列

series

定义

一维数据,一行或一列 。
由一组数据及与之相关的数据标签(即索引)组成。

pandas数据查询

loc方法: 根据行列标签进行查询,既能查询,又能覆盖写入。

#数据预处理,替换并修改数据类型
a.loc[:," " ] = a[" "].str.replace(" "," ").astype('')
使用单个label值查询数据
#得到单个值
a.loc ['label','column']
#得到一个series
a.loc['label',['column 1','column 2']]
使用值列表批量查询
#得到series
a.loc [['label 1','label 2'],'column']
#得到dataframe
a.loc[['label 1','label 2'],['column 1','column 2']]
使用数值区间进行范围查询

既包含开始又包含结束

#行区间
a.loc [['label 1':'label 2'],'column']
#行列区间
a.loc[['label 1':'label 2'],['column 1':'column 2']]
使用条件表达式查询
#简单条件查询
a.loc[a["column"]< value , : ]
#复杂条件查询
a.loc[(a["column 1" ]< value) & (a["column 2" ]==value)])......, : ]
调用函数查询
a.loc[lambda a : (a["column 1" ]< value & a["column 2" ]==value......), : ])]

pandas新增数据列

直接赋值

a.loc [ :, "new column"] = a.[column 1]-a.[column 2]

apply

def function ()

assign

分条件赋值(广播📢)

pandas数据统计函数

汇总类统计

  • 一下子提取所有数字列统计结果
a.describe( )
  • 查看单个series的数据
a["column "].mean( )
  • 聚合函数
a["column "].max( )

唯一去重和按值技术

  • 唯一性去重(用于枚举、分类列)
a["column "].unique( )
  • 按值计数
a["column "].values_counts( )

相关系数和协方差

  • 相关系数:衡量相似度程度
a.corr( ) #全局 相关系数矩阵
a.[column 1].corr(a.[ column 2]) # 单个
  • 协方差:衡量同向方向程度
a.cov( ) #全局 协方差矩阵
a.[column 1].cov(a.[ column 2]) # 单个

pandas缺失值处理

检测

isnull notnull

丢弃、删除缺失值

dropna: axis how inplace

填充空值

fillna : value method axis inplace

pandas SettingWithCopyWarning 报警复现、原因、解决方案

核心要诀:pandas的dataframe的修改写操作,只允许在源dataframe上进行,一步到位

pandas数据排序

series的排序

series.sort_value(ascending = true,inplace = false)
  • ascending : true 升序 false 降序
  • inplace :是否修改原始series

dataframe的排序

dataframe.sort_value(by,ascending = true,inplace = false)
  • by : 字符串或list<字符串>,单列排序或多列排序
  • ascending :bool或list : true 升序 false 降序,by的多列
  • inplace :是否修改原始dataframe

pandas字符串的处理

基本规则

  • 使用方法:先获取seies的str属性,再在属性上调用函数
  • 只能在字符串使用,数字列无效
  • dataframe上没有str属性和处理方法
  • series.str并不是Python原生字符串,而是pandas的一套方法。
  • series.str默认开启正则表达式模式。

pandas的axis参数

  • axis = 0 或者 ”index“
    单行:某一行
    聚合:cross rows
  • axis = 1 或者 “columns”
    单行:某一列
    聚合:cross columns

pandas的索引用途

pandas的merge语法

pandas的merge,相当于sql的join

pandas的concat语法

pandas.concat(objs,axis = 0,join= 'outer',ignore_index = False)

pandas批量拆分与合并EXCEL文件

iloc 拆分dataframe

pandas实现group by分组统计

pandas的分层索引Multiindex

基本概念

  • 分层索引:在一个轴向上拥有多个层级,可以表达更高维度的数据形式
  • 可以更方便的进行数据筛选,如果有序则性能更好
  • group by 等

pandas的数据转换函数map apply applymap

对比

  • map:只用于series,实现每个值>值的映射
  • apply: 用于series实现每个值的处理,用于dataframe实现某个轴的series处理
  • applymap: 只能用于dataframe,用于处理该dataframe的每个元素

map

  • series.map (dict)
  • series.map(function)

pandas对每个分组应用apply函数

pandas使用stack和pivot实现数据透视

pandas对日期的快速处理

  • pd.to_datetime
  • Timestamp
  • DatetimeIndex

pandas处理日期索引的缺失

  • dataframe.reindex
  • dataframe.resample

pandas实现excel的vlookup功能

pandas找出影响结果的特征

引入sklearn 机器学习包

#最影响结果的K个特征
from sklearn.feature_selection import SelectKBest
#卡方检验
from sklearn.feature_selection import chi2

pandas计算同比环比

pct_change

时间相关

  1. 生成时间集 : datetime.date
  2. 截取时间:datetime.strftime
  3. 时间差:datetime.timedelta
date = datetime.date(2019,1,1)
date_end =  datetime.date(2020,12,31)
months = [ ]
while date <= date_end:
    month = date.strftime("%Y-%m")
    print(month)
    i = "'"
    months.append (i + month + i)
    date = date + datetime.timedelta(days=31)

dataframe 排序

  1. 按列排序:sort_values
  2. 重置索引:reset_index (可不保留索引)
df_sort = df.sort_values(by = ['brand_id','shop_id','product_id'])
df_sort = df_sort.reset_index(drop=True)

输出Excel/CSV

  1. CSV 直接输出:to_csv
  2. CSV 对表拆分输出
# 表直接输出
df_sort.to_csv('Comments_Taobao.csv', encoding='utf_8_sig', index=None)

# 确定表规模
row_number = df_sort.shape[0]
csv_number = math.ceil(row_number/ 5)

# 对表拆分并输出
for i in range(5):
    df_temp = df_sort.iloc[i*csv_number:(i+1)*csv_number,:]
    csv_name = 'Comments_Tmall_'+ str(i+1) +'.csv'
    print(csv_name)
    df_temp.to_csv(csv_name, encoding='utf_8_sig', index=None)
  1. EXCEL 输出:to_excel

参数设置

  1. 1)参数嵌入sql : f’’’’ { } ‘’’
    2)参数嵌入sql : f’’’’ ‘’’ %()
begin_date = datetime.date(2021,1,24)
end_date = datetime.date(2021,2,1)
sql_fgs =f'''
select title,web_url,replay_url  from ze.FGS_Transfer
where live_date >= "{begin_date}"
and live_date < "{end_date}"
order by live_date,title;
'''
fgs =  pd.read_sql(sql_fgs,impa_conn)
name=f'aaa.scope.csv'
def upload_data(db, filename):
    csv_filename = name
    create_ddl = f"""
        CREATE TABLE %s.%s (  
            goodsid bigint
            nlp_category string
            mars_category string
            platform string
        )
    """ %(name.split('.')[0],name.split('.')[1])
    
    loader = CSVToHiveLoader(
            database=name.split('.')[0],
            filename=name,
            table=name.split('.')[1],
            delete_file=False,
            is_std_csv=True,
            has_header=True,
            mode='OVERWRITE', # 自行选择模式,OVERWRITE, MERGE或APPEND
            #primary_keys=['sku_name'], # 也可自行选择primary key
            create_table_ddl=create_ddl
        )
    loader.execute()
    print(f'%s uploaded.' %name)
    return
upload_data(name.split('.')[0],name.split('.')[1])
  1. 参数嵌入文件名 : '{a} . format ’
    eval(i)
writer = pd.ExcelWriter('{a} 完成.xlsx'.format(a=complete_date))
for i in ['fgs','kol','ali']:
    eval(i).to_excel(excel_writer=writer,sheet_name=i,encoding='utf_8_sig', index=None)

writer.save()
writer.close()

列表

  1. 两个列表连接 zip()
for product,date in zip(product_list,date_list):
    sql = f"""
    select DISTINCT dt,product_id,daily_sales as volume from dianzhentan.ods_product 
    WHERE product_id = {product}
    and dt = {date}
    """
  1. 字典方式相连
daily_product = dict(zip(productlist,dailylist))
df_d2 = pd.DataFrame()
for product in productlist:
    sql_d1 = f"""
    SELECT dt,brand_name,product_id,title,count,sales,category_3,category_name from tmall.daily_deal
    WHERE product_id = {product}
    and dt = {daily_product[product]}
    """
    print (sql_d1)
    df_d1 = pd.read_sql(sql_d1,impa_conn)
    df_d2 = df_d2.append(df_d1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值