pd.concat数据拼接

从本文你将学到如何利用pandas模块下的concat函数进行数据拼接。

pd.concat

  • 背景
  • 完整代码
  • 结果预览
  • 代码解读
  • 参考文献

背景

现在我有136price202006temp, 136price202007temp, 136price202008temp, 136price202009temp, 136price2020010temp, 136price2020011temp六份数据,我想要将其上下拼接起来形成一张总表,各表名和表头如下表所示

在这里插入图片描述

表名表头
136price202006tempnewdiskid, plate, newdiskname, lon, lat, ras202005, p0, label
136price202007tempnewdiskid, plate, newdiskname, lon, lat, price202006, p0, label
136price202008tempnewdiskid, plate, newdiskname, lon, lat, price202007, p0, label
136price202009tempnewdiskid, plate, newdiskname, lon, lat, price202008, p0, label
136price2020010tempnewdiskid, plate, newdiskname, lon, lat, price202009, p0, label
136price2020011tempnewdiskid, plate, newdiskname, lon, lat, price2020010, p0, label

从表中可以看到每个表一共有8个字段,其中7个相同,1个不同,具体要求如下

  • 关键是把p0拼接,表示各个月份算出来的价格,希望把下面7个字段对齐;
表名字段
dfnewdiskid, plate, newdiskname, lon, lat, p0,label
  • 每个表增加表示时间的字段pricedate
  • 增加表示计算人的字段computman;
  • 将所有label为1或者2的改成0,label为0的改成1;

完整代码

# -*- coding: utf-8 -*-
"""
Project_name:join
Description:
Created on Tue Nov 10 14:44:44 2020
@author: 帅帅de三叔
"""import pandas as pd #导入数据分析模块
import pymysql #导入连接MySQL模块data202006 = pd.read_excel("136price202006temp.xlsx") #读取数据
data202006["pricedate"]= ["2020-06-01"]*len(data202006) #增加一个pricedate的字段data202007 = pd.read_excel("136price202007temp.xlsx")
data202007["pricedate"]= ["2020-07-01"]*len(data202007)data202008 = pd.read_excel("136price202008temp.xlsx")
data202008["pricedate"]= ["2020-08-01"]*len(data202008)data202009 = pd.read_excel("136price202009temp.xlsx")
data202009["pricedate"]= ["2020-09-01"]*len(data202009)data2020010 = pd.read_excel("136price2020010temp.xlsx")
data2020010["pricedate"]= ["2020-10-01"]*len(data2020010)data2020011 = pd.read_excel("136price2020011temp.xlsx")
data2020011["pricedate"]= ["2020-11-01"]*len(data2020011)df = pd.concat([data202006, data202007, data202008, data202009, data2020010, data2020011],join = "inner", axis = 0, ignore_index=True)[["newdiskid", "newdiskname", "pricedate","p0", "label"]]
df["computman"] = ["zbw"]*len(df) #新增computman字段
df["remark"] = [""]*len(df) #新增remark字段
df["label"] = [2 if i == 1 or i == 2 else 0 for i in df["label"]] #推导式语句,如果为1或2则统一标2,其余标0
df["label"] = [0 if i == 2 else 1 for i in df["label"]] #接上一句,如果为2赋值为0,反之为1
df.columns = ["newdiskid", "newdiskname", "pricedate", "price", "casetype", "computman", "remark"] #重新给表头
df = df[["newdiskid", "newdiskname","pricedate", "price", "computman", "casetype", "remark"]] #调整一下表头顺序
df.to_excel("136各楼盘各月份基价.xlsx") #保存本地文件夹下

结果预览

在这里插入图片描述

代码解读

主要用到panda.concat()函数,其基本调用方式如下

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True)

参数解释

  • objs

需要连接的对象,如series,dataframe或者是panel构成的序列list ,常用是两个数据框 [df1, df2],我这里给了6个数据框;

df = pd.concat([data202006, data202007, data202008, data202009, data2020010, data2020011]) #拼接6个数据框
  • axis

表示拼接的方向,axis = 0, 表示在按行拼接,即上下方向; axis = 1, 表示按列方向拼接,即左右方向;

df = pd.concat([data202006, data202007, data202008, data202009, data2020010, data2020011], axis = 0) #按行拼接
  • join

表示连接方式,outer, 表示并集,即全部需要; inner,表示交集,只取重合的部分;

df = pd.concat([data202006, data202007, data202008, data202009, data2020010, data2020011],join = "inner", axis = 0#取交集

注: 取交集后ras202005,price202006,price202007, price202008, price202009, price2020010, price2020011这几个字段就会被干掉;

  • join_axes

传入需要保留的index

  • ignore_index

忽略需要连接的数据框本身的index,当原本的index没有特别意义的时候可以使用,尤其这些数据框的index不完全一致的时候特别有用;

df = pd.concat([data202006, data202007, data202008, data202009, data2020010, data2020011],join = "inner", axis = 0, ignore_index=True) #选择忽略
  • key

keys参数可以用来标注合并后的表数据来源,比如我这里可以给6个key值

df = pd.concat([data202006, data202007, data202008, data202009, data2020010, data2020011],join = "inner", axis = 0, ignore_index=True, keys=['06', ',07', '08''09', ',010', '011']) #标注数据来源
  • levels

序列列表,用于构建MultiIndex的特定级别(唯一值),否则,它们将从index推断。

  • copy

bool值,表示要不要复制数据,默认为True,如果为False,则不要复制数据。

后面2个参数用的比较少

参考文献

1,https://jingyan.baidu.com/article/91f5db1b79205a1c7f05e3ae.html
2,https://www.jianshu.com/p/421f040dfe2f

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部