前言
潘大师(pandas)广泛应用于数据分析、机器学习和深度学习的数据预处理等领域,掌握一些基础的pandas操作是必要的。本文介绍了一些pandas的基础操作,这些操作基本能够满足机器学习和深度学习的基本数据处理要求。如果需要进一步学习,建议自行查阅专著。
安装pandas
cmd窗口运行以下代码:
pip install pandas
潘大师基操
导入库
import pandas as pd
读取文件
读取csv文件:
df1 = pd.read_csv('xxx.csv',encoding="gb18030") # xxx为表格名称
注意,为了防止文件的中文乱码,最好加上encoding="gb18030"这段代码。
读取excel表格:
df2 = pd.read_excel('XXX.xls') # xxx为表格名称
df1 = pd.read_excel('xxx.xlsx',sheet_name = 'sheet1') # 读取xxx文件中名字为sheet1的工作表数据
查看数据信息
df1.head(num) # num填写想要查看的行数,填写6,表示查看表格前6行(不含列表头),num默认5
df1.tail(num) # num填写想要查看的行数,填写6,表示查看表格后6行(不含列表头),num默认5
df2.info() # 查看行列数、数据类型、是否有空集等等
统计结果
df1.describe() # 可以查看数值属性列的平均数mean,标准std,最小值min,最大值max等
修改一列
df2["column"]= range(1, len(df1)+1) # 修改一列的数据,如果column列不存在,则新建一列
纵向合并各个表格或sheet
df = pd.concat([d1,d]) # 纵向合并,直接在行下面加行
merge合并
pd.merge(left = df1,right = df2,left_index = '某个索引',right_index ='某个索引 ' ,how = ' 合并方式')
# left,right指定左右表
# left_index,right_index指定该表的某个索引作为链接条件
合并方式how有以下几种:
# inner表示只返回两个表索引的交集
# right 按照右表的索引返回,没有就返回空,left同理
# outer 返回两个表索引的并集,没有的为空
删除行或列
df2 = df2.drop('column', axis=1) # 删除column列
df2 = df2.drop('row', axis=0) # 删除指定的row行
df.dropna() # 删除带有空数据的行,只要该行有一个数据为空就删除
df.dropna(subset = ['column']) # 指定删除某列元素中为空值的行
df.drop_duplicates() # 删除重复的行,这里的重复是该行所有元素均一样
df.drop_duplicates(subset = 'column',keep = num) # 各行只要是column列相同就认为是相同行,keep表示指定保留第num行,不写默认保留所有相同行中最开始的一行
选取某一列或列
df1[['column1','column2']] # 选取列标签为column1与column2的列
df2.loc[0:0, : ] # 选取第0行
按列修改内容
df1['column'] = df1['column].str.replace('**', '*') # 将列标签中为column的列所有的**改为*
df1[column'] = df1['column'].str.replace('%', '').astype(float)/100 # 将某一列的百分数转化为小数
列计算
df1['column'] = df1['column1']*df1['column2'] # 将column1的数据与column2的数据对应相乘,结果保存到column中(本身就存在column则修改,否则再最右边新建)
索引数据
df.iloc[row1:row2,column1:column2] # 显示第row1到row2行的column1到column2列
df.iloc[row1:row2,[column1,column2]] # 显示第row1到row2行的column1列与column2列
df.loc[行条件; 列条件] # 这个是基于条件的索引,行条件一般是一个判定某一列中每行的一个条件语句,结果会返回与df的行数相同的bool值,列条件是列标签等
# 常见的判定有:
# df.loc[df['column'] == 特征,:] # 找出column列中满足该特征的所有行,并显示完整行对应的完整列
# df.loc[df['column'].isin(['特征]),['column','column1']] # 找出column中包含特征的所有行,并显示该行的column与column1列
数据排序
sort_df = df.sort_values('column', ascending=False)
# 按照column列的数值大小进行排序, ascending为False从大到小,为True表示从小到大
数据分组
df.groupby('column','as_index')[['column1', 'column2']].方法
# 按照column分类,对column1与column2列的元素使用某种统计方法
# 不指定则会默认对所有数字列处理
# as_index可以避免column列的元素成为行索引
数据切分
cut(x, bins,right,labels)
'''
x:要传入和切分的一维数组,可以是列表,也可以是DataFrame的一列
bins表示切分的方式,可以自定义传入列表[a,b,c],表示按照a-b,b-c的区间来进行切分也可以输入数值(例如s),直接指定分成5组
right的值可以设置为True或者False,当为True时,表示分组区间是包含右边,不包含左边;等于False代表区间含左不含右
labels则是打标参数,把某列数据切分成3组,每一组可以给它设置一个对应的标签。
'''
Apply()方法
df.groupby(['列名’])['column'].apply(func) # func接收一个函数,把分组后的数据根据函数进行处理
# 先使用groupby()方法将df的数据按照相同的列名进行分组,对于每一组数据的column列,执行func函数
文件批处理
import os
os.chdir('C:/Users/...') # 注意是反斜杠,转移工作路径到此路径下,类似于将执行文件放置于上述路径
for ii in os.listdir(): # 批处理此文件夹下的所有数据,执行os.chdir('C:/Users/...')后,()内可以为空,否则需要写上路径
pass