日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pd.concat数据拼接

發布時間:2024/1/18 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的pd.concat数据拼接的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。