python基础学习7【聚合apply()、透视表pivot_table()、concat()、主键合并merge()、join()、combine_first()】

本文介绍了Pandas库中用于数据处理的关键方法,包括apply和transform对数据的聚合操作,pivot_table创建透视表,以及concat和merge进行数据的横向和纵向合并。同时提到了数据预处理中的清洗、标准化和转换过程。
摘要由CSDN通过智能技术生成

使用apply方法聚合数据

apply()方法类似agg方法能够将函数应用于每一列。

使用transform方法聚合数据

transform方法能够对整个dataframe的所有元素进行操作。且transform方法只有一个参数func,表示对dataframe操作的函数;

同时transform方法还能够对dataframe分组后的对象groupby进行操作,可以实现组内离差标准化等操作。

创建透视表与交叉表

pivot_table函数​:

可以更改margins参数,查看汇总数据;

当某些数据不存在时,会自动填充NaN,因此可以指定fill_value参数。

实操:

指定行和列绘制透视表情况:

margins=True:

汇总求和:aggfun=np.sum

这一期的错误请看上一期的解答2,不是很想改正了。(水一波)

改完了就能看到正常的数据。

使用pandas进行数据预处理【合并数据、清洗数据、标准化数据、转换数据】

合并数据【横向、纵向】

横向表堆叠

当axis=1时,concat做行对齐,然后将不同列名称的两张或多张表合并。当两个表索引不完全一样时,可以使用join参数选择是内连接还是外连接。在内连接的情况下,仅仅返回索引重叠部分。在外连接的情况下,则显示索引的并集部分数据,不足的地方则使用空值填补。

当两张表完全一样时,不论join参数取值。

实操:

import pandas as pdfrom sqlalchemy import create_engineengin = create_engine('mysql+pymysql://root:123456root@58.0.20.242:3306/test?charset=utf8')#这一句最好记到,写不对就会报错))

pd.read_sql('meal_order_detail1',con=engin)

a=data.iloc[:,:10]#所有行的前十列作为a,按位置进行索引b=data.iloc[:,10:]#data里第十列以后的作为b,iloc方法是通过索引行、列的索引位置[index, columns]来寻找值,左闭右开pd.concat([a,b],axis=1,join='inner').shape#axis=1,按横轴;INNER JOIN(此处join的连接方式不影响,只是介绍一下):内连接,也可以只写JOIN。只有进行连接的两个表中,都存在与连接标准相匹配的数据才会被保留下来,相当于两个表的交集。如果前后连接同一张表,也叫自连接。

纵向堆叠----concat函数

使用concat函数时,在默认情况下,即axis=0时,concat做列对齐,将不同行索引的两张或多张表纵向合并。

实操:

a = data.iloc[:100,:]#前100行和所有列作为ab = data.iloc[100:,:]#100行以后的所有列数据作为bpd.concat([a,b]).shape#轴向不用定,默认纵向堆叠

主键合并【merge、join】

通过一个或多个键将两个数据集的行连接起来,类似于sql中的join。

merge()函数:

和数据库的join一样,merge函数也有左连接、右连接、内连接和外连接,除此之外,在合并过程中可以对数据集进行排序。

可根据merge函数中的参数说明,并按照需求修改相关参数,就可以多种方法实现主键合并。

order = pd.read_csv('./609/meal_order_info.csv',encoding='gbk')order.head()

合并:

pd.merge(order,data,left_on = 'info_id',right_on='order_id')

join()

order.rename({'info_id':'order_id'},inplace=True)#重命名info_id为order_iddata.join(order,on = 'order_id',rsuffix='1')#右边堆叠

combine_first方法

数据分析和处理过程中若出现两份数据的内容几乎一致的情况,但是某些特征在其中一张表上是完整的,而在另外一张表上的数据则是缺失的时候,可以用combine_first进行重叠合并。

import numpy as npdis1={'id':list(range(1,10)),     'cpu':['i7','i5',np.nan,'i7','i7','i5',np.nan,np.nan,'i5']}pd.DataFrame(dis1)

a=pd.DataFrame(dis1)dis2={'id':list(range(1,10)),     'cpu':['i7','i5','i5',np.nan,'i7','i5','i5',np.nan,'i5']}pd.DataFrame(dis2)

a.combine_first(b)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当然,下面是关于 DataFrame 的多级索引、透视数据透视、时间序列分析、缺失值处理、分组和聚合以及合并和连接的几个例子: 1. 多级索引: ```python import pandas as pd # 创建一个带有多级索引的 DataFrame data = {'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8], 'C': [9, 10, 11, 12]} index = pd.MultiIndex.from_tuples([('Group1', 'Subgroup1'), ('Group1', 'Subgroup2'), ('Group2', 'Subgroup1'), ('Group2', 'Subgroup2')]) df = pd.DataFrame(data, index=index) # 访问多级索引的数据 print(df.loc['Group1']) # 获取 Group1 的所有数据 print(df.loc[('Group1', 'Subgroup1')]) # 获取 Group1 的 Subgroup1 的数据 ``` 2. 透视: ```python import pandas as pd # 创建一个包含销售数据的 DataFrame data = {'Region': ['East', 'West', 'North', 'South', 'East', 'West', 'North', 'South'], 'Product': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], 'Sales': [100, 200, 150, 250, 300, 400, 350, 450]} df = pd.DataFrame(data) # 创建透视,按照 Region 和 Product 进行分组,并计算 Sales 的平均值 pivot_table = df.pivot_table(index='Region', columns='Product', values='Sales', aggfunc='mean') print(pivot_table) ``` 3. 数据透视: ```python import pandas as pd # 创建一个包含销售数据的 DataFrame data = {'Region': ['East', 'West', 'North', 'South', 'East', 'West', 'North', 'South'], 'Product': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], 'Sales': [100, 200, 150, 250, 300, 400, 350, 450]} df = pd.DataFrame(data) # 创建数据透视,按照 Region 和 Product 进行分组,并计算 Sales 的总和 pivot_table = pd.pivot_table(df, values='Sales', index='Region', columns='Product', aggfunc='sum') print(pivot_table) ``` 4. 时间序列分析: ```python import pandas as pd # 创建一个时间序列的 DataFrame date_range = pd.date_range('2022-01-01', periods=10, freq='D') df = pd.DataFrame({'Date': date_range, 'Value': range(10)}) # 将 Date 列设置为索引,并按月份进行汇总 df.set_index('Date', inplace=True) monthly_data = df.resample('M').sum() print(monthly_data) ``` 5. 缺失值处理: ```python import pandas as pd import numpy as np # 创建一个包含缺失值的 DataFrame data = {'A': [1, np.nan, 3, 4], 'B': [5, 6, np.nan, 8], 'C': [9, 10, 11, np.nan]} df = pd.DataFrame(data) # 删除包含缺失值的行 df.dropna(inplace=True) print(df) # 使用均值填充缺失值 df.fillna(df.mean(), inplace=True) print(df) ``` 6. 分组和聚合: ```python import pandas as pd # 创建一个包含销售数据的 DataFrame data = {'Region': ['East', 'West', 'North', 'South', 'East', 'West', 'North', 'South'], 'Product': ['A', 'A', 'B', 'B', 'A', 'A', 'B', 'B'], 'Sales': [100, 200, 150, 250, 300, 400, 350, 450]} df = pd.DataFrame(data) # 按照 Region 进行分组,并计算每个分组的平均销售额 grouped_data = df.groupby('Region')['Sales'].mean() print(grouped_data) # 按照 Region 和 Product 进行分组,并计算每个分组的总销售额 grouped_data = df.groupby(['Region', 'Product'])['Sales'].sum() print(grouped_data) ``` 7. 合并和连接: ```python import pandas as pd # 创建两个 DataFrame data1 = {'A': [1, 2, 3], 'B': [4, 5, 6]} df1 = pd.DataFrame(data1) data2 = {'C': [7, 8, 9], 'D': [10, 11, 12]} df2 = pd.DataFrame(data2) # 合并两个 DataFrame,按照索引进行连接 merged_df = pd.merge(df1, df2, left_index=True, right_index=True) print(merged_df) # 沿着列的方向连接两个 DataFrame concatenated_df = pd.concat([df1, df2], axis=1) print(concatenated_df) ``` 希望这些例子能够帮助你更好地理解 DataFrame 的高级用法!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天都是被迫学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值