python中的第3方工具包pandas功能强大, 日常工作中比如筛选、排序、计算、透视、vlookup、分类汇总等excel常用操作用pandas也能轻松实现;
本文精心整理的pandas数据处理与分析的52个技巧, 100多个知识点, 掌握这些,处理数据不再是难事!
零基础学习python数据分析, 建议安装anaconda, 可通过下面网址安装 : 清华镜像
配套相关基础课程, 理论+实践: 欢迎订阅 →
- 1 导入工具包
# pandas 和numpy是两个基础的工具包
import numpy as np
import pandas as pd
# matplotlib seaborn是作图工具包
import matplotlib.pyplot as plt
import seaborn as sns
# 通过os设置默认路径
import os
os.chdir('C:/Users/用户/Desktop/') # 桌面的路径
# 图表中文显示问题
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
# 不显示预警
import warnings
warnings.filterwarnings('ignore')
- 2 spyder中快捷键
# 注释、取消注释
Ctrl+1
# 块注释 / 取消块注释
Ctrl+4/5
# 从当前光标所在行开始执行
F9
- 3 读取excel数据
# 读取文件
df = pd.read_excel('文件.xlsx')
# 读取文件同时筛选需要的列
df = pd.read_excel('文件.xlsx')[['','']] # 读取并筛选几列
# 读取特定的工作表
df = pd.read_excel('文件.xlsx',sheet_name='明细') # 读取某个sheet表
# with方法读取
with pd.ExcelFile('path_to_file.xls') as xls:
df1 = pd.read_excel(xls, 'Sheet1')
df2 = pd.read_excel(xls, 'Sheet2')
- 4 读取csv或者txt
# 分隔符: \s 表示空白字符; \s+多个空白字符; \r回车; \n换行; \t水平制表符; \v垂直制表符
df = pd.read_csv('文件.txt',sep='\s+',error_bad_lines=False)
- 5 批量读取同一文件夹下文件方式1
for root, dirs, files in os.walk('.',topdown=False):
print(files)
num = len(files) # 获取文件个数
data = pd.DataFrame() # 定义一个空的dataframe
# 遍历所有文件
for i in range(num):
datai = pd.read_excel('./%s' %files[i])
datai_len = len(datai)
data = data.append(datai) # 添加到总的数据中
print('文件%i列, 第%i个表,读取%i行数据,名称:%s'%(len(data.columns),i,datai_len,files[i])) # 查看是否全部读取,格式是否出错
data.reset_index(drop=True,inplace=True)
- 6 批量读取同一文件夹下的文件方式2
# 导入工具包
import pandas as pd
import numpy as np
import os
# 路径
path = 'd:/文件路径/'
# 文件列表
files = []
for file in os.listdir(path):
if file.endswith(".csv"):
files.append(path+file)
# 定义一个空的dataframe
data = pd.DataFrame()
# 遍历所有文件
for file in files:
datai = pd.read_csv(file,encoding='gbk')
datai_len = len(datai)
data = data.append(datai) # 添加到总的数据中
print('读取%i行数据,合并后文件%i列, 名称:%s'%(datai_len,len(data.columns),file.split('/')[-1]))
# 查看是否全部读取,格式是否出错
# 重置索引
data.reset_index(drop=True,inplace=True)
- 7 批量读取同一文件夹下得文件方式3(当txt文件不规范,读取会丢失数据或文件太大时)
# 循环读取数据
n = 1
for file in files:
with open(file, 'r',encoding='gbk') as f_input:
lisi= []
for line in f_input:
lisi.append(list(line.strip().split('|')))
datai = pd.DataFrame(lisi)
datai2 = guolv(datai)
data = data.append(datai2)
print('读取第%i个文件,件名%s,文件%i行,文%i列.处理后文件%i行,%i列' %(n,file,datai.shape[0],datai.shape[1],datai2.shape[0],datai2.shape[1]))
n = n + 1
- 8 文件导出,放在同一工作簿
with pd.ExcelWriter('文件.xlsx') as writer:
df1.to_excel(writer, sheet_name='文件1')
df2.to_excel(writer, sheet_name='文件2')
- 9 文件导出, 分组导出放在同一工作簿
writer = pd.ExcelWriter('文件.xlsx')
for name , group in df.groupby('名称'):
group.to_excel(writer,sheet_name=name,index=False)
- 10 文件导出, 分组导出, 放在不同工作簿
for name , group in df.groupby('名称'):
group.to_excel(name+'.xlsx',index=False)
- 11 获取当前时间
import time
tim = time.strftime("%Y-%m-%d%H%M%S", time.localtime())
- 12 保存图片分辨率设置
plt.savefig('名称.png',dpi=150)
- 13 数据查看
df.describe() # 描述统计
df.info() # 基本信息
df.dtypes # 列格式类型
df.head(2) #前n行
df.tail(2) #后n行
df.shape #维度
df.index #索引
df.columns #列名
df.sample(10) #随机抽样
df.resample() #随机抽样
- 14 行列处理(删除,排序)
# 删除列
del df['变量名']
df.drop('变量名',axis=1,inplace=True)
# 删除行
df.drop('c')
# 更改列名
df.columns= ['var1','var2','var3'] # 列名的个数 = 字段个数
df.rename(columns = {'名称前':'名称后'},inplace=True) # columns 不能少
# series中改列名
s.rename('名称',inplace=True)
# 调整列的顺序
df1 = df1[['var1','var2','var3']]
# 调整行的顺序
df2 = df1.reindex(['a','b','c','d','e']) # 返回一个新的DataFrame,按新的索引进行排序
- 15 缺失值(查看,替换,计数)
# 判断是否是缺失值
df.isnull() #不