文本文件的读取
Pandas读取官方文档查阅地址 Input/Output — pandas 0.24.2 documentation (pydata.org)
read_csv\read_table(filepath_or_buffer,sep=’\t’,header=’infer’,names=None,index_col=None,usecols=None,dtype=None,converters=None,skiprows=None,skipfooter=None,nrows=None,na_values=None,skip_blank_lines=True,parse_dates=False,thousands=None,comment=None,encoding=None)
读取txt,注意到以下问题:如何忽略其他不相关内容,手动添加#;如何添加变量名称;如何避免编号中’00’的消失。
import pandas as pd
data1=pd.read_table(filepath_or_buffer=r'D:\Projects\Python\Doing\pythonProject\data\data1.txt',
sep=',',# 指定分隔符
header=None, # 不需要将原始数据中的第一行读作表头
names=['id','name','gender','occupation'], # 为各列起变量名称
skiprows=2, #跳过起始的两行数据
skipfooter=2, #跳过末尾的两行数据
comment='#', # 不读取'#'开头的数据行
converters={
'id':str}, #对工号变量进行类型转换,避免开头的00消失
encoding='gbk'
)
print(data1)
'''
id name gender occupation
0 00446 张敏 女 前端工程师
1 00483 李琴 女 Java开发工程师
2 00552 赵东来 男 数据分析师
3 00589 丁顺昌 男 数据分析师
'''
电子表格的读取
read_excel(io,sheetname=0,header=0,skiprows=Nne,skip_footer=0,index_col=None,names=None,parse_cols=None,parse_dates=False,na_values=None,thousands=None,convert_float=True)
import pandas as pd
data2=pd.read_excel(io=r'D:\Projects\Python\Doing\pythonProject\data\data2.xlsx',
header=None, # 不需要将原始数据中的第一行读作表头
names=['id','date','prod_name','color','price'], # 为各列起变量名称
converters={
'0':str}, #字典中的键必须为0,因为原始表中没有列名称
na_values='未知' # 原数据表中“未知”转换为缺失值
)
print(data2)
'''
id date prod_name color price
0 23146 2016-03-18 连衣裙 237 白色
1 1344527 2017-06-12 牛仔裤 368 蓝色
2 223685 2018-02-10 皮鞋 589 NaN
3 37249 2017-07-17 寸衫 299 白色
4 368241 2016-03-23 板鞋 299 蓝色
5 1127882 2018-09-17 西装 1599 黑色
'''
数据库数据的读取
读入SQL Server需要使用pymssql模块,在jupyter中输入“!pip install pymssql”;
读入MySQL需要使用Pymysql模块,在jupyter中输入“!pip install pymysql”。
然后基于两个模块各自的connect函数构建数据库与python之间的桥梁,最后在搭建好连接的基础上使用pandas模块中的read_sqll函数实现数据库数据的读取。
1.connect函数
(1)pymssql.connect(server=None,user=None,password=None,database=Nonesharset=None)
(2)pymysql.connect(host=None,user=None,password=’’,database=None,port=0,charset=’’)
2.read函数
pd.read_sql(sql,con,index_col=None,coerce_float=True,parse_dates=None,columns=None)
SQL SERVER连接
import pymssql
import pandas as pd
# 连接SQL Server数据库
connect=pymssql.connect(server='localhost',# 指定服务器名称
user='', # 指定访问数据库的用户名
password='', # 指定访问数据库的密码
database='train', # 指定数据所在数据库的名称
charset='utf8' # 指定UTF-8字符集,避免中文乱码
)
# 读取数据
data=pd.read_sql("select * from sec_buildings where direction='朝南'",con=connect)
# 关闭连接
connect.close()
# 数据输出
data.head()
MySQL连接
import pymysql
import pandas as pd
# 连接MySQL数据库
connect=pymysql.connect(host='localhost',# 指定服务器名称
user='root', # 指定访问数据库的用户名
password='123456', # 指定访问数据库的密码
database='wx', # 指定数据所在数据库的名称
port=3306, # 指定数据库连接的端口号
charset='utf8' # 指定UTF-8字符集,避免中文乱码
)
# 读取数据
data=pd.read_sql("select * from wx_gift",connect)
# 关闭连接
connect.close()
# 数据输出
print(data)
'''
gift_id name point_needed num_released img
0 1 党员学习笔记 100 3 /static/photo/礼品1.jpg
1 2 古典书签 50 23 /static/photo/礼品2.jpg
2 3 古风扇书签 300 4 /static/photo/礼品5.jpg
3 4 党建纪念品 1000 10 /static/photo/礼品4.jpg
'''
import pandas as pd
# 读取数据
data3=pd.read_excel(io=r'D:\Projects\Python\Doing\pythonProject\data\data3.xlsx')
# 查看数据规模
print(data3.shape
# (3000, 6)
# 查看表中各变量的数据类型
print(data3.dtypes)
'''
id int64
gender object
age float64
edu object
custom_amt object
order_date object
dtype: object
'''
数据的概览与清洗
从外部环境将数据读入到Python中后,首先要了解数据,数据规模、各变量的数据类型、是否存在重复值、缺失值等。
1.数据类型的判断和转换,读取数据,了解数据规模、各变量的数据类型
- astype用于数据类型的强制转换,常用转换类型包括str、float、int。
- 由于消费金额custom_amt变量中带有‘¥’,所以数据类型转换之前必须将包其删除(通过字符串切片方法删除,[1:]表示从字符的第二个元素开始截断)。
- 对于字符转日期问题,推荐使用更加灵活的pandas的to_datetime方法,在format参数的调解下,可以识别任意格式的字符型日期值。
import pymysql
import pandas as pd
# 读取数据
data3=pd.read_excel(io=r'D:\Projects\Python\Doing\pythonProject\data\data3.xlsx')
# 查看数据规模
# print(data3.shape
# (3000, 6)3000行6列
# 查看表中各变量的数据类型
# print(data3.dtypes)
'''
id int64
gender object
age float64
edu object
custom_amt object
order_date object
dtype: object
'''
# 数值型转字符型
data3['id']=data3['id'].astype(str)
# 字符型转数值型
data3['custom_amt']=data3['custom_amt'].str[1:].astype(float)
# 字符型转日期型
data3['order_date']=pd.to_datetime(data3['order_date'],format='%Y年%m月%d日')
# 重新查看数据集的各变量类型
# print(data3.dtypes)
'''
id object
gender object
age