基本导入
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 可指定某个值,或以列表形式传入多个值
基本导入
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的设定
import pandas as pd
df = pd.read_table(r"C:\Users\...\.test.txt", sep = ' ')
也可导入csv,但需指明分隔符号
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)