pandas
2021/9/22 23:17:29
本文主要是介绍pandas,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
import pandas as pd import numpy as np pandas 打开多个sheet ''' df_names = pd.ExcelFile('text.xlsx') 打开工作薄 print(df_names.sheet_names) 打印sheet列表 for i in df_names.sheet_names: new_df = pd.read_excel('text.xlsx',i) 循环打开工作表 print(new_df) ''' 新建文件 data = pd.DataFrame({'序号':[1,2,3],'姓名':['张三','李四','王五']}) data.set_index('序号') 设置 索引 不用pandas自带的索引 data.to_excel('路径.xlsx') 读取文件 path = '路径.xlsx' data = pd.read_excel(path,header=None,names=['姓名','年龄','日期',],index_col='日期', nrows=None) 其他文本格式的分割符可能是 ,。 可以在参数里添加sep=','表示以什么分割 还可以 用正则来匹配 haeder和names 需要配合使用 只使用header 列名会变成0 1 2 3 4 index_col['',''] 索引列 可以有多个 skiprows=[2,3] 跳过索引行 encoding 参数 字符编码格式 nrows=3 默认5行 想读取的行数 一下 都是累属性 不用加括号 data.head(3) 默认是5行数据 最好写到参数里 data.shape 返回多少行 多少列 data.columns 列名 第一行数据 data.index 索引 返回元组(start,end,step(步长)) data.dtypes 数据类型 保存数据 data.to_excel(path) 在读取数据或处理完数据后 保存数据 在保存数据的格式 需要在读取数据的时候都设置好 如 索引 表头等格式 数据结构 DataFranme 二维数据 整个表格 多行多列 df.index 索引列 df.columns 列名 Series 一维数据 一行或一列 Series data = pd.Series(['张三','李四','王五','赵六'],index=['A','B','C','D']) 是由 索引列 和数据列组成 index 指定索引列 字典创建series dic = {'姓名':'张三','性别':'男','年龄':'18'} data = pd.Series(dic) key 是索引 value 是数据 data['姓名'] 拿到数据 data[['姓名','性别']] 拿到多个数据 list_1 = [1,2,3] list_2 = ['a','b','c'] data = pd.Series(list_2,index=list_1) 想设置谁是索引 就把谁 放到index里 data.values 查值 DataFranme data = pd.read_excel('路径.xlsx',index_col=None) df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],columns=['a','b','c']) data.sort_index('性别') 排序 默认按索引 可以自己设置 data.isnull('性别') 是否为空 不空=True data.notnull('性别') 不为空 print(df) print(df[['a','b']]) a列0行 单列和多列查询 print(df.loc[[0,1]][['a','b']]) 使用属性拿取 可以单、多列单、多行 推荐 print(df.iloc[0][0]) 全用下标 表示 字典创建DataFranme dic = { '姓名':['张三','李四'], '性别':['男','女'], } df = pd.DataFrame(dic) print(df) key是列索引 值是数据 ''' 姓名 性别 张三 男 李四 女 ''' print(df.dtypes) 每列的类型 print(df.columns) Index(['姓名', '性别'], dtype='object') print() print() print() 多个Series创建DataFrame Series_1 = pd.Series(['张三','李四','王五'],index=[[1,2,3]],name='姓名') Series_2 = pd.Series(['男','女','男'],index=[[1,2,3]],name='姓别') Series_3 = pd.Series([22,23,24],index=[[1,2,3]],name='年龄') data = pd.DataFrame({Series_1.name:Series_1, Series_2.name:Series_2, Series_3.name:Series_3} ) data = pd.DataFrame([Series_1,Series_2,Series_3]) data_1 = pd.DataFrame([[5,6,7],[7,8,9]],columns=[[1,2,3]],index=['性别','姓名']) print(data_1) print('*'*30) print(data) print('*'*30) print(data.join(data_1,how='left',lsuffix='_l',rsuffix='_r')) 使用join 必须 添加后面的2个参数 join方法 不好用 报错columns overlap but no suffix specified: MultiIndex([(1,) ''' 字典形式的Series 姓名 姓别 年龄 张三 男 22 李四 女 23 王五 男 24 列表形式的Series 3 姓名 张三 李四 王五 姓别 男 女 男 年龄 22 23 24 相当于 旋转了90度 行和列兑换了位置 DataFrame上面有数据对齐功能 索引不一样 会导致空会NaN表示 DataFrame常用方法 数据.head( 5 ) 查看前5行 数据.tail( 3 ) 查看后3行 data.values 查看数值 data.shape 查看行数、列数 shape模型;身材;具体化 data.fillna(0) 将空值填充0 可以更换成其他值 data.replace( 1, -1) 将1替换成-1 data.isnull() 查找数据中出现的空值 data.notnull() 非空值 data.dropna() 删除空值 data.unique() 查看唯一值 data.reset_index(drop=True删除索引、False转为普通数据列) 修改、删除,原有索引,详见例1 data.columns 查看数据的列名 data.index 查看索引 data.sort_index() 索引排序 data.sort_values() 值排序 pd.merge(数据1,数据1) 合并 pd.concat([数据1,数据2]) 合并,与merge的区别,自查 pd.pivot_table( 数据 ) 用df做数据透视表(类似于Excel的数透) ''' 连接查询 数据合并与重塑 Merge pd.merge(数据1,数据2,on=指定连接字段,how='inner、left、right、outer') on=指定连接字段 需要链接的字段 how='inner、left、right、outer' 选择连接方式 多字段连接 pd.merge(数据1,数据2,on=[字段1,字段2],how='inner、left、right、outer') 两个表 表1有1个张三 表2有2个张三 那么会认为是相同的人 默认张三在连表中是同一个数据 所以自动填补缺失数据 请看下面示例 ''' 表1 表1 张三 1 张三 1 张三 2 连表 出现_x 出现_y 张三 1 1 张三 1 2 这里前面的1 就是自动添加的 因为同一个人 前面没有数据 自动补全 ''' 直接字段和索引进行连接 pd.merge(数据1,数据2,left_on=字段,right_index=索引列,how='outer') 同上 会自动补全 join 不指定on 字段是按索引进行连接 指定on 按列连接 data_1.join(data_2,on=字段) 2表连接 data_1.join([data_2,data_3],on=字段) 多表连接 print(data.join(data_1,how='left',lsuffix='_l',rsuffix='_r')) 使用join 必须 添加后面的2个参数 join方法 不好用 报错columns overlap but no suffix specified: MultiIndex([(1,) concat ''' concat(objs, axis=0, join='outer', join_axes=None, 根据那个轴 指定对齐 join_axes=[df.index] ignore_index=False, 无视index的concat ignore_index=True keys=None, 来自于那张表 keys = ['x','y','z'] levels=None, names=None, verify_integrity=False, sort=None, copy=True) ''' np_data = pd.DataFrame(np.arange(9).reshape(3,3),) print(np_data) df_data = pd.concat([np_data,np_data],axis=1) 轴的方向 print('*'*30) print(df_data) ''' 2 1 2 4 5 7 8 ****************************** 2 1 2 4 5 7 8 1 2 4 5 7 8 ''' 从上面例子可以看出 都是合并 不过就是合并到 右边或下边 append 默认沿着列凭借(axus = 0 列对齐) reseult = df1.append(df2) append方法 是内置的方法 不是concat的方法 可以讲series和字典 作为DataFrame的新的一行 reseult = df1.append(df2,ignore_index=True) 就是一列数据给 横着放到原数据的最后一行 表格字段不同的表 合并 reseult = df1.append(df2,ignore_index=True) 应用第一是concat 第二 merge 第三 join不太用 各种数据自动填充 ''' pd.read_excel参数: skiprows=行数 跳过几行 usecols="区域" 和Excel中一样,就是一个列的区域 选择需要的区域 index_col="字段名" 将谁设置为索引 dtype={'序号':str,'性别':str,'日期':str} 防止出错,把类型全指定为字符型 数据.at的用法 作用:获取某个位置的值,例如,获取第0行,第a列的值,即:index=0,columns='a' 变量名 = 数据.at[0, 'a'] ''' pd.read_excel(路径,skiprows=8,usecols='F:I',dtype=('序号':str,'性别':str)) for i in data.index: 循环需要填充行的索引 data['序号'].at[i] = i + 1 这里['序号']是字段名 at方法是获取单元格内容 并赋值 data['性别'].at[i] = '男' if i%2 == 0 else '女' 三目运算 data['日期'].at[i] = 起始日期 + datetime.timedelta(days=i) 填充日期 data['日期'].at[i] = datetime.date(起始日期.year + i,起始日期.month,起始日期.day) 填充数据 后期都需要做字符串处理 所以需要在赋值前 把运算结果做好 for循环里面 不能添加DataFrame操作 在循环里只是修改或添加 数据 如 data.set_index('序号',inplace=True) 个人想法 可能这个方法本身就是循环的 列于列计算 data['销售金额'] = data['单价'] * data['销售金额']
这篇关于pandas的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
- 2024-11-24细说敏捷:敏捷四会之每日站会
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解