【pandas】教程:8-如何组合多个表格的数据

Pandas 组合多个表格的数据

本节使用的数据为 data/air_quality_no2_long.csv,链接为 pandas案例和教程所使用的数据-机器学习文档类资源-CSDN文库

在这里插入图片描述

在这里插入图片描述

导入数据

  • N O 2 NO_2 NO2
import pandas as pd 
air_quality_no2 = pd.read_csv("data/air_quality_no2_long.csv",
                            parse_dates=True)
air_quality_no2 = air_quality_no2[["date.utc", "location",
                                "parameter", "value"]]

air_quality_no2
                       date.utc            location parameter  value
0     2019-06-21 00:00:00+00:00             FR04014       no2   20.0
1     2019-06-20 23:00:00+00:00             FR04014       no2   21.8
2     2019-06-20 22:00:00+00:00             FR04014       no2   26.5
3     2019-06-20 21:00:00+00:00             FR04014       no2   24.9
4     2019-06-20 20:00:00+00:00             FR04014       no2   21.4
...                         ...                 ...       ...    ...
2063  2019-05-07 06:00:00+00:00  London Westminster       no2   26.0
2064  2019-05-07 04:00:00+00:00  London Westminster       no2   16.0
2065  2019-05-07 03:00:00+00:00  London Westminster       no2   19.0
2066  2019-05-07 02:00:00+00:00  London Westminster       no2   19.0
2067  2019-05-07 01:00:00+00:00  London Westminster       no2   23.0

[2068 rows x 4 columns]
  • P M 2.5 PM2.5 PM2.5
air_quality_pm25 = pd.read_csv("data/air_quality_pm25_long.csv",
                            parse_dates=True)
air_quality_pm25 = air_quality_pm25[["date.utc", "location",
                                    "parameter", "value"]]
air_quality_pm25
                       date.utc            location parameter  value
0     2019-06-18 06:00:00+00:00             BETR801      pm25   18.0
1     2019-06-17 08:00:00+00:00             BETR801      pm25    6.5
2     2019-06-17 07:00:00+00:00             BETR801      pm25   18.5
3     2019-06-17 06:00:00+00:00             BETR801      pm25   16.0
4     2019-06-17 05:00:00+00:00             BETR801      pm25    7.5
...                         ...                 ...       ...    ...
1105  2019-05-07 06:00:00+00:00  London Westminster      pm25    9.0
1106  2019-05-07 04:00:00+00:00  London Westminster      pm25    8.0
1107  2019-05-07 03:00:00+00:00  London Westminster      pm25    8.0
1108  2019-05-07 02:00:00+00:00  London Westminster      pm25    8.0
1109  2019-05-07 01:00:00+00:00  London Westminster      pm25    8.0

[1110 rows x 4 columns]

数据连接 (concat)

在这里插入图片描述

  • 将同样数据结构的两个表格的数据连接在一起
air_quality = pd.concat([air_quality_pm25, air_quality_no2], axis=0)
air_quality
                       date.utc            location parameter  value
0     2019-06-18 06:00:00+00:00             BETR801      pm25   18.0
1     2019-06-17 08:00:00+00:00             BETR801      pm25    6.5
2     2019-06-17 07:00:00+00:00             BETR801      pm25   18.5
3     2019-06-17 06:00:00+00:00             BETR801      pm25   16.0
4     2019-06-17 05:00:00+00:00             BETR801      pm25    7.5
...                         ...                 ...       ...    ...
2063  2019-05-07 06:00:00+00:00  London Westminster       no2   26.0
2064  2019-05-07 04:00:00+00:00  London Westminster       no2   16.0
2065  2019-05-07 03:00:00+00:00  London Westminster       no2   19.0
2066  2019-05-07 02:00:00+00:00  London Westminster       no2   19.0
2067  2019-05-07 01:00:00+00:00  London Westminster       no2   23.0

[3178 rows x 4 columns]

concat 会将两个表格连接起来,默认 行连接(rows 增多),也可以设置为 列连接(columns 增多)

  • 按日期排序
air_quality = air_quality.sort_values("date.utc")
air_quality.head()
                       date.utc            location parameter  value
2067  2019-05-07 01:00:00+00:00  London Westminster       no2   23.0
1003  2019-05-07 01:00:00+00:00             FR04014       no2   25.0
100   2019-05-07 01:00:00+00:00             BETR801      pm25   12.5
1098  2019-05-07 01:00:00+00:00             BETR801       no2   50.5
1109  2019-05-07 01:00:00+00:00  London Westminster      pm25    8.0

使用多个表格公共的标识符连接表格 (merge)

在这里插入图片描述

stations_coord = pd.read_csv("data/air_quality_stations.csv")
stations_coord
                      location  coordinates.latitude  coordinates.longitude
0                      BELAL01              51.23619                4.38522
1                      BELHB23              51.17030                4.34100
2                      BELLD01              51.10998                5.00486
3                      BELLD02              51.12038                5.02155
4                      BELR833              51.32766                4.36226
..                         ...                   ...                    ...
61             Southend-on-Sea              51.54420                0.67841
62  Southwark A2 Old Kent Road              51.48050               -0.05955
63                    Thurrock              51.47707                0.31797
64      Tower Hamlets Roadside              51.52253               -0.04216
65        Groton Fort Griswold              41.35360              -72.07890

[66 rows x 3 columns]
air_quality_merge = pd.merge(air_quality, stations_coord, how="left", on="location")
air_quality_merge
                       date.utc            location parameter  value  \
0     2019-05-07 01:00:00+00:00  London Westminster       no2   23.0   
1     2019-05-07 01:00:00+00:00             FR04014       no2   25.0   
2     2019-05-07 01:00:00+00:00             FR04014       no2   25.0   
3     2019-05-07 01:00:00+00:00             BETR801      pm25   12.5   
4     2019-05-07 01:00:00+00:00             BETR801       no2   50.5   
...                         ...                 ...       ...    ...   
4177  2019-06-20 23:00:00+00:00             FR04014       no2   21.8   
4178  2019-06-20 23:00:00+00:00             FR04014       no2   21.8   
4179  2019-06-21 00:00:00+00:00  London Westminster      pm25    7.0   
4180  2019-06-21 00:00:00+00:00             FR04014       no2   20.0   
4181  2019-06-21 00:00:00+00:00             FR04014       no2   20.0   

      coordinates.latitude  coordinates.longitude  
0                 51.49467               -0.13193  
1                 48.83724                2.39390  
2                 48.83722                2.39390  
3                 51.20966                4.43182  
4                 51.20966                4.43182  
...                    ...                    ...  
4177              48.83724                2.39390  
4178              48.83722                2.39390  
4179              51.49467               -0.13193  
4180              48.83724                2.39390  
4181              48.83722                2.39390  

[4182 rows x 6 columns]

使用 merge ,对于 air_quality 表中的每一行,都从 air_quality_stations_coord 表中添加相应的坐标,两个表都有相同的列位置,用作组合信息的键。merge 函数支持多个连接选项,类似于数据库风格的操作。

air_quality_parameters = pd.read_csv("data/air_quality_parameters.csv")
air_quality_merge2 = pd.merge(air_quality_merge, air_quality_parameters, 
                            how="left", left_on="parameter", right_on='id')
air_quality_merge2
                      date.utc            location parameter  value  \
0     2019-05-07 01:00:00+00:00  London Westminster       no2   23.0   
1     2019-05-07 01:00:00+00:00             FR04014       no2   25.0   
2     2019-05-07 01:00:00+00:00             FR04014       no2   25.0   
3     2019-05-07 01:00:00+00:00             BETR801      pm25   12.5   
4     2019-05-07 01:00:00+00:00             BETR801       no2   50.5   
...                         ...                 ...       ...    ...   
4177  2019-06-20 23:00:00+00:00             FR04014       no2   21.8   
4178  2019-06-20 23:00:00+00:00             FR04014       no2   21.8   
4179  2019-06-21 00:00:00+00:00  London Westminster      pm25    7.0   
4180  2019-06-21 00:00:00+00:00             FR04014       no2   20.0   
4181  2019-06-21 00:00:00+00:00             FR04014       no2   20.0   

      coordinates.latitude  coordinates.longitude    id  \
0                 51.49467               -0.13193   no2   
1                 48.83724                2.39390   no2   
2                 48.83722                2.39390   no2   
3                 51.20966                4.43182  pm25   
4                 51.20966                4.43182   no2   
...                    ...                    ...   ...   
4177              48.83724                2.39390   no2   
4178              48.83722                2.39390   no2   
4179              51.49467               -0.13193  pm25   
4180              48.83724                2.39390   no2   
4181              48.83722                2.39390   no2   
...
4179  Particulate matter less than 2.5 micrometers i...  PM2.5  
4180                                   Nitrogen Dioxide    NO2  
4181                                   Nitrogen Dioxide    NO2  

[4182 rows x 9 columns]

记住

多个表格的连接,可以用 concat 函数,可以基于 column,也可以基于 row 的连接

对于类似于数据库的 merging/joining 表格,可以使用 merge 函数。

参考

  1. How to combine data from multiple tables? — pandas 1.5.2 documentation (pydata.org)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要对多个表格进行关联索引并进行行列计算,您可以使用pandas库中的merge函数来合并表格,并使用groupby和agg函数进行计算。下面是一个示例代码: ```python import pandas as pd # 定义要关联的表格列表 excel_files = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx'] # 创建一个空的DataFrame,用于存储读入的数据 df_all = pd.DataFrame() # 循环遍历每个Excel文件并读取数据 for file in excel_files: df = pd.read_excel(file) # 将当前Excel文件的数据添加到整体数据框中 df_all = pd.concat([df_all, df]) # 定义关联索引的列名 index_cols = ['Index1', 'Index2'] # 使用merge函数进行关联索引 merged_df = pd.merge(df_all, on=index_cols) # 进行行列计算,例如计算每个索引组合下的平均值 result = merged_df.groupby(index_cols).agg({'Column1': 'mean', 'Column2': 'sum'}) # 打印计算结果 print(result) ``` 在上述代码中,我们首先创建一个空的DataFrame `df_all`,然后循环遍历每个Excel文件,并使用`pd.read_excel()`函数读取数据,并将每个文件的数据添加到`df_all`中。 接下来,我们定义了要用于关联索引的列名`index_cols`,这些列将用于在表格合并时匹配行。 然后,我们使用`pd.merge()`函数将所有表格按照指定的`index_cols`进行关联索引,并将结果存储在`merged_df`中。 最后,我们使用`groupby()`函数按照`index_cols`进行分组,并使用`agg()`函数计算每个索引组合下的行列计算结果,例如平均值、总和等。 您可以根据实际需求修改关联索引的列名和行列计算的逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黄金旺铺

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

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

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

打赏作者

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

抵扣说明:

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

余额充值