python数据读取和预处理

(一)读取数据

一、导入.xlsx

基本导入

import pandas as pd
df = pd.read_excel(r"C:\Users\...\.test.xlsx")

指定参数

df = pd.read_excel(r"C:\Users\...\.test.xlsx", sheet_name = 'sheet1', index_col = 0,
	 header = 0, usecols = [0, 2]

1、指定sheet
可通过设定sheet_name参数指定导入sheet,可指定具体名字,也可传入顺序,从0开始:sheet_name = 0

2、指定行索引
设置index_col

3、指定列索引
header默认为0,即第一行

4、指定导入列
usecols 可指定某个值,或以列表形式传入多个值

二、导入.csv

基本导入

import pandas as pd
df = pd.read_csv(r"C:\Users\...\.test.csv")

参数

import pandas as pd
df = pd.read_csv(r"C:\Users\...\.test.csv", sep = ' ', nrows = 10,
	 engine = 'python', encoding = 'gbk')

1、指明分隔符
sep为逗号、空或制表符等

2、指明读取行数
nrows

3、指定编码格式
默认为UTF-8,若是csv(逗号分隔)(*.csv)格式的文件,需指定为gbk

4、engine
文件路径或文件名中包含中文时,可通过设置engine消除OSError:Initializing from file failed
同时,编码格式需改为utf-8-sig

5、其他
如指定行、列索引或导入某几列,同xlsx的设定

三、导入.txt

import pandas as pd
df = pd.read_table(r"C:\Users\...\.test.txt", sep = ' ')

也可导入csv,但需指明分隔符号

四、导入sql

import pymysql

conn = pymysql.connect(host = 'localhost', 
						user = 'user', 
						password = 'pwd', 
						db = 'db', 
						charset = 'utf8')

连接好后

sql = "select * from info"
df = pd.read_sql(sql, conn)

(二)数据预览

df.head(n)    # 默认展示前5行
df.shape	  # 以元组形式返回行、列数
df.info()	  # 查看数据表中的数据类型
df.describe()   # 获取所有数值类型字段的分布值

#返回如下值:
count
mean
std
min
25%
50%
75%
max

(三)预处理

一、缺失值

查看

# 返回每一列的缺失值情况
df.info()

# 每一个值的缺失情况
df.isnull()

删除

# 删除含NaN值的行
df.dropna()

# 删除全空的行
df.dropna(how = 'all')

填充

df.fillna(0)

# 多列填充
df.fillna({'sex' : 'm', 'age' : '30'})

二、重复值

df.drop_duplicates()

# 指明列
df.drop_duplicates(subset = ['name', 'id'], keep = 'last')

keep默认为first,保留第一个值,也可是 False,不保留

(四)类型转换

df["id"].dtype		# 查看类型
df["id"].astype("float64") 	#转换

(五)设置索引

一、为无索引表添加

# 添加列索引
df.columns = ['col1', 'col2', ... ]

# 添加行索引
df.index = [1, 2, 3]

二、重设索引

有的表虽然有索引,但不是我们想要的。比如有个表把序号作为行索引,而我们想把订单编号作为行索引:

df.set_index('订单编号')

还可以传入多个索引,并将这种用多列做索引的方式称为层次化索引。

三、重命名索引

df.rename(columns = {'col1':'id', 'col2':'name'},
	 	  index = {1:'a', '2':'b'})

四、重置索引

常用于数据分组、数据透视表中

df.reset_index(level = None, drop = False, inplace = False)

level用于指定将层次化索引中的第几级别转化为columns,第一个索引为0级,默认全部索引转为columns

drop指定是否将原索引删除

inplace指定是否修改原数据表

(六)时间

一、获取时间

>>>from datetime import datetime
>>> datetime.now()
datetime.datetime(2019, 5, 19, 11, 32, 41, 825054)

# 在pycharm中
datetime.now()
out: 2019-05-19 11:29:42.434095

>>> datetime.now().year
2019

返回周几

# 从0开始计数
>>> datetime.now().weekday() + 1
7

# 在excel中把周日作为第一天
weekday(now() - 1)

返回周数

>>> datetime.now().isocalendar()
(2019, 20, 7)
# 2019的第20周的第7天
>>> datetime.now().isocalendar()[1]
20

指定格式

# 只展示日期
>>> datetime.now().date()
datetime.date(2019, 5, 19)

#格式
>>> datetime.now().strftime('%Y-%m-%d %H:%M:%S')
'2019-05-19 11:56:55'

转换

#字符串
>>> now = datetime.now()
>>> now
datetime.datetime(2019, 5, 19, 11, 58, 46, 11981)
>>> str(now)
'2019-05-19 11:58:46.011981'

#
>>> from dateutil.parser import parse
>>> now = datetime.now().strftime('%Y-%m-%d')
>>> parse(now)
datetime.datetime(2019, 5, 19, 0, 0)

你可能感兴趣的:(学习笔记)