10月16日我的学习心得与个人理解
文本文件读取
pd.read_csv(
filepath_or_buffer,
sep=',',
header='infer',
name=None,
usecole=None,
skiprows=None,
skipfooter=None,
converters=None,
encoding=None,
thousands=None
)
filepath_or_buffer:指定txt文件或csv文件所在的具体路径
sep:指定原数据集中各字段之间的分隔符,默认为逗号','
id name income
1 jason 10
header:是否需要将原数据集中的第一行作为表头,默认将第一行用做字段名称,如果原数据没有表头需要将该参数设置为None
names:如果原数据集中没有字段,可以通过该参数在数据读取时给数据框添加具体的表头
usecols:指定需要读取原数据集中的哪些变量名
skiprows:数据读取时,指定需要跳过原数据集开头的行数,有一些表格开头是有几行文字说明的,读取的时候应该跳过
skipfooter:数据读取时,指定需要跳过原数据集末尾的行数
converters:用于数据类型的转换(以字典的形式指定)
encoding:如果文件中含有中文,有时需要指定字符编码
thousands:可以修改数字里面的千分位
import numpy as np
import pandas as pd
data01 = pd.read_csv(
r'data_test01.txt',
skiprows = 2, python能自动过滤掉完全无内容的空行(写2,3均可)
sep = ',', 默认为逗号,写不写都行
skipfooter = 3,
encoding = 'utf-8', 乱码指定对应的编码
header = None, 数据没有表头时,需要设置参数为None.设置为None时,默认用索引值做表头
names = ['id','year','month','date','gender','job','salary'],
id如果不想做自动转换,可以修改id数据类型
converters = {'id':str}, 用Python类型指定
thousands = '&', 去除表示千分位的&符号
usecols = ['job','salary']
)
data01
excel表格读取
pd.read_excel(io,sheet_name=0,header=0,skiprows=None,skip_footer=0
index_col=None,names=None,
na_values=None,thousands=None,convert_float=True)
io:指定电子表格的具体路径
sheet_name:指定需要读取电子表格中的第几个sheet,即可以传递整数也可以传递具体的sheet名称
header:是否需要将数据集的第一行开头作表头,默认为是需要的
skiprows:读取数据时,指定跳过的开始行数
skip_footer:读取数据时,指定跳过的末尾行数
index_col:指定哪些列用作数据框的行索引
na_values:指定原始数据中哪些特殊值代表了缺失值
thousands:指定原有数据集中的千分位符
convert_float:默认将所有的数值型字段转换为浮点型字段
converters:通过字典的形式,指定某些列需要转换的形式
pd.read_excel(r'data_test02.xlsx',
header = None,
names = ['ID','Prodect','Color','Size'],
converters = {'ID':str}
)
表格读取的具体操作
pd.read_excel(r'data'_test02.xlsx',
header = None,
names = ['id','product','color','price'],
converters = {'id':str},
index_col = 0, 指定列名称作为标签项
sheet_name = 1, 通过索引的方式读取工作簿
sheet_name = 'bbb' 通过工作簿名称读取
)
MySQL数据读取
需要借助于第三方模块来链接MySQL数据库
pymsql
!pip3 install pymysql
如果出错,只需将pip更新的代码加上即可
import pymysql
conn = pymysql.connect(host,port,user,password,database,charset)
host:指定需要访问的MySQL服务器IP地址
port:指定访问MySQL数据库的端口号
charset :指定读取MySQL数据库的字符集,数据库表中含有中文时,可以将该参数设置为'utf-8'或'gbk'
user:指定访问MySQL数据库的用户名
password/pwd:指定访问MySQL数据库的密码
database/db:指定访问MySQL数据库的具体库名
MySQL数据库具体操作
! python -m pip install --upgrade pip
! pip3 install pymysql
import pymysql
bri = pymysql.connect(
host = '127.0.01',
port = 3306
user = 'root'
password = ''
database = 'day06'
charset = 'utf8'
)
res = pd.read_sql('select * from course',con=bri)
res
bri.close() 断开链接,节省资源。操作速度很快没拿到数据之前就断开了
数据概览
df.columns 查看列
df.index 查看行
df.shape 行列
df.dtypes 数据类型
df.describe 统计描述
默认只统计数字类型的数据,非数字类型统计需要加参数include
sec_buildings.describe(include='object')
df.head() 取头部多条数据
df.tail() 取尾部多条数据
行列操作
dfrename(column={'旧列名称':'新列名称'},inplace=True)
能修改但是会报个错误可添加如下配置
pd.set_option('mode.chained_assignment',None)
创建新的列
df['新列名称'] = df.列名称/(df.列名称1+df.列名称2)
自定义位置
df.insert(3,'新列名称',新列名称)
添加行
df3 = df1.append(df2)
读取数据时有两种方式
第一种
df['列名称']
df[['列名称1','列名称2','列名称3',...]]
第二种(不推荐经常用)
df.列名称
数据筛选
获取指定列数据
df['列名']
df[['列名1','列名2','列名3'...]]
获取指定行数
sec_bulidings.loc[sec_buildings['region'] == '浦东',:]
sec_buildings.loc[(sec_building['region'] == '浦东') & (sec_buildings['size'] > 150),:]
sec_buildings.loc[(sec_buildings['region'] == '浦东') & (sec_buildings['size'] > 150),['name','tot_amt','price_unit']]
逻辑运算符链接条件,条件最好用括号括起来
数据处理
sec_car = pd.read_csv(r'sec_cars.csv')
sec_car.head()
sec_car.dtypes
sec_car.Bording_time = pd.to_datetime(sec_car.Boarding_time,format = '%Y年%m月')
sec_car.New_price = sec_car.New_price.str[:-1].astype(float)
类型转换
dtypes类型查看
astype类型转换