[python]pandas操作(持续更新中)

这篇博客主要介绍了pandas的常用操作,包括map、apply和applymap的用法,以及get_dummies的功能。map针对Series的每个值进行映射,apply则可以按行/列对DataFrame应用函数,applymap则作用于DataFrame的每个元素。此外,还提到了get_dummies用于处理分类变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容较多可使用Ctrl+f搜索,大部分常用的应该有,都是本人使用过的

#两种方式
df = pd.DataFrame(data = np.random.randint(0,150,size = (5,3)),
             columns=['Python','En','Math'],
             index = list('ABCDE'),dtype=np.float32)

df = pd.DataFrame(data = {'Python':np.random.randint(100,150,size = 5),
                     'En':np.random.randint(0,150,size = 5),
                     'Math':np.random.randint(0,150,size = 5)},index = list('ABCDE'))

df.sort_index(ascending = False)  #索引排序,ascending默认为True,从小到大
df.head(10) # 显示头部10行,默认5个
df.tail() # 显示末尾10行,默认5个
df.shape # 查看形状,行数和列数
df.dtypes # 查看数据类型
df.index # 行索引
df.columns # 列索引
df.values # 对象值,二维ndarray数组
df.describe() # 查看数值型列的汇总统计,计数、平均值、标准差、最小值、四分位数、最大值
df.info() # 查看列索引、数据类型、非空计数和内存信息
df2.mean()  #平均数
df2.std() # 标准差
df.isnull()  
df.dropna() #空数据过滤
df.fillna(1024)  #填充空数据
df.take(index)  #根据得到的index排序,可以少于原来的index
df.median() #中位数
df.quantile(q = [0.25,0.5,0.75])  #分位数(取位置为排序后的数据的第1/4,1/2,3/4个数)
df.cummin() # 累计最小值
df.diff() # 计算差分,和上一行,相减

# 没有修改原数据
df.drop(labels = [0,1,5],axis = 0) # 删除指定行
# inplace 替换:替换原来数据,修改原数据
df.drop(labels=[0,1,3,5],axis = 0,inplace=True)
df.to_csv('./salary.csv',
          sep = ',', # 文本分隔符,默认是逗号
          header = True,# 是否保存列索引
          index = True) # 是否保存行索引,保存行索引,文件被加载时,默认行索引会作为一列
pd.read_csv('./salary.csv',
            sep = ',',# 默认是逗号
            header = [0],#指定列索引
            index_col=0) # 指定行索引
df1.to_excel('./salary.xlsx',
            sheet_name = 'salary',# Excel中工作表的名字
            header = True,# 是否保存列索引
            index = False) # 是否保存行索引,保存行索引
pd.read_excel('./salary.xlsx',
              sheet_name='salary',# 读取哪一个Excel中工作表,默认第一个
              header = 0,# 使用第一行数据作为列索引
              names = list('ABCDE'),# 替换列索引
              index_col = 3)# 指定行索引,B作为行索引
# 一个Excel文件中保存多个工作表
with pd.ExcelWriter('./data.xlsx') as writer:
    df1.to_excel(writer,sheet_name='salary',index = False)
    df2.to_excel(writer,sheet_name='score',index = False)
pd.read_excel('./data.xlsx',
              sheet_name='score') # 读取Excel中指定名字的工作表 

# SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具
from sqlalchemy import create_engine
conn = create_engine('mysql+pymysql://root:root@localhost/pandas?charset=UTF8MB4')
# 保存到数据库
df.to_sql('data',#数据库中表名
          conn,index = False,if_exists = 'append')# 数据库连接

df['Python']  #列获取
df[['Python','Math']]  #得到表格
df2.loc['A'] # 行索引,指定的A~E
df2.loc[['A','D']]  #得到表格
pd.concat([df1,df2],axis = 0)  #合并
pd.merge(df1,df2,) # 根据共同的属性,进行合并
pd.merge(df1,df3,left_on = 'name',right_on = '名字')  #扩展为同一行

#重命名轴索引
df.rename(index = {'A':'AA','B':'BB'},columns = {'Python':'人工智能'}) 
df.replace({'Python':6},-1024) # 将Python这一列中等于2的,替换为-1024
# map批量元素改变,Series专有
df['Keras'].map({9:'Hello',5:'World',np.NaN:'AI'}) # 字典映射
df.T  #转置
df.unstack(level = -1)  #适用于多层索引,行索引变为列索引(0表示最外层并以此类推,-1表示最里层)
df.stack(level = 1)  #适用于多层索引,行索引变为列索引(0表示最外层并以此类推,-1表示最里层)
df.sum(level = -1) #适用于多层索引,保留level所选的层,合并其他层
df.mean(level = 1)  #适用于多层索引,保留level所选的层,得其他层总和的平均值
df3['Python','期中']['A']  #多层列索引根据层级关系取数据
df2['Python','期中']  #非多层列索引
df['Tensorflow'].argmin() # 计算最小值位置,自然数0、1、2……
df['Keras'].argmax() # 最大值位置
df.idxmax() # 最大值索引标签:index强标记
df.idxmin() # 最小值索引标签
df['Python'].value_counts() # 统计元素出现次数
df['Python'].unique() # 去重
df.cov() # 属性的协方差
df['Python'].cov(df['Keras']) # Python和Keras的协方差
df.corr() # 所有属性相关性系数
df.corrwith(df['Tensorflow']) # 单一属性相关性系数
df.nlargest(10,columns='Keras') # 根据属性Keras排序,返回最大10个数据
df.nsmallest(5,columns='Python') # 根据属性Python排序,返回最小5个数据
df.sort_index(axis = 0,ascending=False) # 按索引排序,降序
df.sort_index(axis = 1,ascending=False) #按列名排序,升序
df.sort_values(by = ['Python']) #按Python属性值排序
df.sort_values(by = ['Python','Keras'])#先按Python,再按Keras排序
pd.qcut(df.Python,q = 4,# 4等分
        labels=['差','中','良','优']) # 等频分箱(每个标签对应的数据数量相同)
pd.cut(df.Python,bins = 3)  #等宽分箱(根据最大和最小值进行等分,在哪个区域就分到哪个区域,最好指定断点了,例:bins=[0.60,90,120,150] )
df.groupby(by = ['class','sex'])[['Tensorflow','Keras']].agg([np.max,np.min,pd.Series.count])  #先行索引,后列索引,列索引下一层索引amax,amin,count(可以分别制定每个列索引)
df.pivot_table(values=['Python','Keras','Tensorflow'],# 要透视分组的值
               index=['class','sex'], # 分组透视指标,by = ['class','sex']
               aggfunc={'Python':[('最大值',np.max)], # 聚合运算
                        'Keras':[('最小值',np.min),('中位数',np.median)],
                        'Tensorflow':[('最小值',np.min),('平均值',np.mean),('计数',count)]})  #透视表也是一种分组聚合运算
df['姓名'].str.extract(r'.*?(\d+)')  #z

map,apply,applymap

  1. map()是pandas.series.map()方法,对每个值进行映射操作。
  2. apply()是DF的方法, 对DF中的数据按行/列应用func操作,也可以单独对Series应用func操作。
  3. applymap()也是DF的方法, 对整个DF所有元素应用func操作。

get_dummies

在这里插入图片描述

df=pd.get_dummies(df,columns=["color"])
print(df)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值