数据文件的导入和导出(read_csv\read_excle\read_table)
"""
读取csv文件
"""
import pandas as pd
df_1 = pd.read_csv(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/1.数据导入与导出/data1.csv',
encoding = 'utf8',engine = 'python')
df_2 = pd.read_csv(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/1.数据导入与导出/data2.csv',
encoding = 'utf8',engine = 'python',header = None)
#header = None 没有表头,有时候第一行数据会变成表头,使用这个参数修正
'''
读取excle文件
'''
df_3 = pd.read_excel(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/1.数据导入与导出/data3.xlsx')
'''
读取txt文件
有时候数据会粘在一起,可以用sep = ‘,’隔开
'''
df_4 = pd.read_table(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/1.数据导入与导出/data4.txt',
sep = ',', engine = 'python',header = None)
'''
导出文件
index = True(False) 是否有行标签
header = True(False) 是否有表头
'''
df_1.to_csv(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/1.数据导入与导出/导出.csv',
index = True, header = True)
df_2.to_excel(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/1.数据导入与导出/导出.xlsx',
index = True, header = True)
'''
utf-8:包含全世界所有国家需要用到的字符,英文网站用的较多
gbk:包含所有的中文字符
unicode:把所有语言统一到一套编码(占的内存更大)
'''
缺失值和重复值处理
缺失值处理(isnull()、fillna()、dropna())
"""
缺失值和重复值处理
"""
'''
缺失值处理
'''
import pandas as pd
#gbk:包含所有中文字符,默认是utf-8。文件中有中文,如果不修改成gbk会乱码。
df = pd.read_csv(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/2.缺失值处理/data.csv',
encoding = 'gbk', engine = 'python')
'''
isnull()
进行逻辑判断,判断空值所在的位置
'''
na = df.isnull()
'''
找出空值所在的行数据【逻辑判断+取数】
'''
#na.any(axis = 1)逻辑判断
df[na.any(axis = 1)]#取数
'''
找出空值所在的列
'''
na[['gender']].any(axis = 1)
df[na[['age','gender']].any(axis = 1)]
'''
填充缺失值fliina()
'''
df_1 = df.fillna('1')
'''
删除缺失值(默认删除整行数据)
'''
df_2 = df.dropna()
重复值处理(duplicated()、drop_duplicates)
"""
重复值处理
"""
import pandas as pd
#gbk:包含所有中文字符,默认是utf-8。文件中有中文,如果不修改成gbk会乱码。
df = pd.read_csv(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/3.重复值处理/data1.csv',
encoding = 'gbk', engine = 'python')
'''
找出重复值【逻辑判断】完全一致时才会判定为true
'''
result1 = df.duplicated()
'''
根据列名来判断重复值
'''
#根据某个
result2 = df.duplicated('gender')
#根据某些
result3 = df.duplicated(['gender','name'])
'''
提取重复行df[]
'''
df[result1]
df[result2]
'''
删除重复行
'''
#删除完全重复
df_1 = df.drop_duplicates()
#根据列名来删除
df_2 = df.drop_duplicates(['gender','name'])
slice函数的应用:字段截取
字段截取函数,作用对象是字符串
"""
slice函数的应用
字段截取函数,作用对象是字符串
身份证:
前六位:地址码
接下来8位:出生日期码
再3位:顺序码
最后一位:校验码
"""
import pandas as pd
df = pd.read_csv(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/4.slice函数的使用/data1.csv',
encoding = 'gbk', engine = 'python')
#id 的颜色有深有浅,说明是数字型,不是字符串型
'''
将id转化为字符串
'''
df['id'] = df['id'].astype(str)
'''
提取地址码
'''
#area = df['id'].slice(0,6) #'Series' object has no attribute 'slice'
area =df['id'].str.slice(0,6)
'''
提取出生日期码
'''
birthday = df['id'].str.slice(6,14)
'''
提取顺序码
'''
ranking = df['id'].str.slice(14,17)
'''
提取校验码
'''
only = df['id'].str.slice(17)
'''
将信息回填到数据框
'''
df['area'] = area
df['birthday'] = birthday
df['ranking'] = ranking
df['only'] = only
数据抽取(df[df[]])
本质:先逻辑判断再取数
"""
数据抽取:
根据一定条件,抽取数据
"""
import pandas as pd
df = pd.read_csv(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/5.数据抽取/data1.csv',
encoding = 'gbk')
'''
比较运算:包含大于、小于运算
between()
实际上【逻辑判断+取数】
'''
#抽取好评数>17000的行
df[df['好评数'] > 17000]
#抽取15000 > 好评数 > 17000的行
df[df['好评数'].between(15000,17000)]
'''
字符串匹配:contains()
默认空值会被取出(默认na = True)
na = False:空值不会被取出
'''
df[df['品牌'].str.contains('苹果',na = False)]
df[df['品牌'].str.contains('苹果',na = True)]
'''
逻辑运算
一定要加入小括号以免优先级出错
'''
#取出好评 > 16000,价格 < 7000的电脑
df[(df['好评数'] > 16000) & (df['价格'] < 7000)]
df[(df['好评数'] > 18000) | (df['价格'] < 6000)]
数据框合并(concat())
"""
数据框合并
concat()函数
concat([df1,df2,df3.....])
"""
import pandas as pd
import numpy as np
df_1 = pd.DataFrame(np.arange(12).reshape(3,4))
df_2 = 2 * df_1
#竖向合并:默认axis = 0
new_df_1 = pd.concat([df_1,df_2])
#横向合并
new_df_2 = pd.concat([df_1,df_2], axis = 1)
'''
join参数:inner表示交集,outer表示并集
'''
df_3 = pd.DataFrame(np.arange(12).reshape(3,4),index = ['A','B',2])
#按交集横向合并,axis =1 跨列横向合并
new_df_3 = pd.concat([df_1,df_3],axis = 1,join = 'inner')
#按并集横向合并
new_df_4 = pd.concat([df_1,df_3], axis =1, join = 'outer')
数据框内容列拼接
"""
数据框的内容拼接
"""
import pandas as pd
df = pd.read_csv(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/7.合并数据框的列/data1.csv',
encoding = 'gbk')
new_df = df.astype(str)
new_df['id'] = new_df['area'] + new_df['birthday'] + new_df['ranking'] + new_df['only']
merge函数(SQL 样式的联合查询)
"""
merge函数:merge(df1,df2,how)
拼接两个数据框
"""
import pandas as pd
df_1 = pd.read_csv(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/8.merge函数/data1.csv',
encoding = 'gbk')
df_2 = pd.read_csv(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/8.merge函数/data2.csv',
encoding = 'gbk')
#根据name将两个数据框合连接起来,删除各自数据框独有的信息
df_3 = pd.merge(df_1,df_2, left_on = 'name',right_on = 'name')
#根据name将两个数据框合连接起来,保留左边数据框独有的信息(右边部分会自动赋予空值)
df_4 = pd.merge(df_1,df_2, left_on = 'name',right_on = 'name', how = 'left')
#根据name将两个数据框合连接起来,保留右边数据框独有的信息
df_5 = pd.merge(df_1,df_2, left_on = 'name',right_on = 'name', how = 'right')
#根据name将两个数据框合连接起来,保留全部数据框独有的信息
df_6 = pd.merge(df_1,df_2, left_on = 'name',right_on = 'name',how = 'outer')
数据框计算
"""
数据框计算:
不建议使用,速度太慢
建议使用numpy中的array计算
"""
import pandas as pd
df = pd.read_csv(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/9.数据框计算/data1.csv',
encoding = 'gbk')
df['总价'] = df['单价'] * df['数量']
#仅计算,不显示,会有warnning
df.总价 = df['单价'] * df['数量']
df.单价 * 2
随机抽样
"""
随机抽样
1.按照个数抽样 sample(n[,replace])
2.按照比例抽样:采用的更多 sample(frac[,repalce])
"""
import numpy as np
import pandas as pd
#生成一个DataFrame
df = pd.DataFrame(np.arange(600).reshape(100,6), columns = list('ABCDEF'))
#设置随机种子
np.random.seed(seed =2)
#按个数抽样【不放回】
df.sample(n = 10)
#按个数抽样【有放回】
df.sample(n = 10, replace = True)
#按百分比抽样【不放回】
df.sample(frac =0.1)#600*0.1=60个
#按百分比抽样【有放回】
df.sample(frac = 0.1, replace = True)
数据标准化
"""
数据标准化
目的:消除量纲的影响
数据标准化的方式:
1、0-1标准化:也称离差标准化,他是对原数据进行线性变换,使用结果落在【0,1】区间
X = (x-min())/(max()-min())
2、Z标准化:数据均值为0,方差为1
X = (x - mean())/std()
"""
import pandas as pd
df = pd.read_csv(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/11.数据标准化/data1.csv',
encoding = 'gbk', engine = 'python')
#0-1标准化
df['国内生产总值0-1标准化'] = round((df['国内生产总值'] - df['国内生产总值'].min()) \
/(df['国内生产总值'].max() - df['国内生产总值'].min()), 2)#round(,2)保留两位小数
df['人均GDP0-1标准化'] = round((df['人均GDP']- df['人均GDP'].min())\
/(df['人均GDP'].max() - df['人均GDP'].min()), 2)
#分析相关性
df['人均GDP0-1标准化'].corr(df['国内生产总值0-1标准化'])
'''
0.9998341076160933--->相关性达到99.98%
'''
#Z标准化:有正有负
df['国内生产总值Z标准化'] = round( (df['国内生产总值'] - df['国内生产总值'].mean())\
/df['国内生产总值'].std(),2)
df['人均GDP Z标准化'] = round( (df['人均GDP']-df['人均GDP'].mean() ) \
/df['人均GDP'].std(), 2)
#Z标准化的均值非常接近0,标准差接近1
df['国内生产总值Z标准化'].mean()
df['国内生产总值Z标准化'].std()
#分析相关性
df['国内生产总值Z标准化'].corr(df['人均GDP Z标准化'])
数据分组(列内分组)
"""
数据分组
cut()函数
cut(Series,bins,right = True,labels = null)
Series:需要分组的数据【数据框的某列数据】
bins:分组的划分数组【列表】
right:分组的时候,右边是否闭合,默认闭区间
labels:分组的自定义标签
"""
import pandas as pd
df = pd.read_csv(r'/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/12.数据分组/data1.csv',
encoding = 'gbk')
#对人均GDP分组
bins = [min(df.人均GDP)-1,2000,4000,6000,8000,max(df.人均GDP)+1]
df['人均GDP分组'] = pd.cut(df.人均GDP,bins)
df['人均GDP分组'] = pd.cut(df.人均GDP, bins, right = False)
#自定义标签【分组后小组的组名】
labels = ['2000以下','2001-4000','40001-6000','6001-8000','8000以上']
df['人均GDP分组'] = pd.cut(df.人均GDP, bins, labels = labels)
时间格式数据
import pandas as pd
df = pd.read_csv(
r"/Users/dx/Desktop/Python数据分析与机器学习/3.数据分析处理库-Pandas/数据处理/13.时间格式数据/data1.csv",
encoding='gbk',engine='python')
"""
to_datetime()函数:
to_datetime(Series, format)
Series:字符型时间数据;【数据框的时间那一列】
format:格式化的方法
"""
#将字符型时间数据转化为时间格式数据
df['时间'] = pd.to_datetime(df.购买时间, format='%Y/%m/%d')
#将时间格式的数据转化为指定字符型数据
df['字符型时间'] = df.时间.dt.strftime('%Y/%m/%d')# %H:%M:%S 小时分钟秒
#提取时间格式数据中的年、月、周、日、时、分、秒
df['年'] = df['时间'].dt.year
df['月'] = df['时间'].dt.month
df['周'] = df['时间'].dt.weekday
df['日'] = df['时间'].dt.day
df['时'] = df['时间'].dt.hour
df['分'] = df['时间'].dt.minute
df['秒'] = df['时间'].dt.second