最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pandas基礎使用指南之排序、字符串日期處理和文件合并拆分技巧

 更新時間:2026年01月07日 09:21:29   作者:杰瑞不懂代碼  
這篇文章主要為大家簡單介紹了Pandas一些基礎使用,包括排序,字符串日期處理和文件合并拆分等技巧,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

之前我們已經介紹了 pandas的基礎使用用法,這一期我們來看看這個包其他有意思的方法

一、排序

1.1 對Series排序

Series的排序,主要是兩個參數,一個是ascending,代表是否升序排列,另一個就是很熟悉的inplace

sr = pd.Series([2,3,8,4,5])
sr.sort_values(ascending=False,inplace=True) # 降序排序,同時替換原有DataFrame
print(sr)

輸出的結果為,注意排序后index的順序也會跟著變:

2    8
4    5
3    4
1    3
0    2
dtype: int64

1.2 對DataFrame排序

由于DataFrame是二維的,因此排序時多了一個參數by,表示按照哪一列進行排序,同時ascending也支持布爾數組,實現多條件的排序,如下:

df = pd.DataFrame({"A":["B","A","B","B","A"],
                    "B":[2,3,8,4,5],
                    "C":[11,2,7,4,5]})
# 單條件排序
df.sort_values(by="B",ascending=True,inplace=True)
print(df)

單條件的排序結果為:

    A  B   C
0  B  2  11
1  A  3   2
3  B  4   4
4  A  5   5
2  B  8   7

而對于多條件排序,byascending一一對應,代表應該是升序還是降序

# 多條件排序
df.sort_values(by=["A","B"],ascending=[False,True],inplace=True)
print(df)

多條件排序輸出結果如下,首先按照A列降序排序,然后按照B列升序排序,所以有一個主次的關系:

   A  B   C
0  B  2  11
3  B  4   4
2  B  8   7
1  A  3   2
4  A  5   5

二、字符串和日期處理

對于字符串的處理,我們一般都使用str進行,而對于日期,我們用dt,直接通過底下的代碼我們來看

df = pd.DataFrame({"姓名":["張三","李四","王五","趙六","王二"],
                    "出生日期":["2000-01-01","2001-02-02","2002-03-03","2003-04-04","2004-05-05"],
                    "分數":["90分","29分","78分","46分","57分"]})
print(df.dtypes)
print("="*30)
df["出生日期"] = pd.to_datetime(df["出生日期"]) # 轉換為日期類型
print(df["出生日期"].dtype) # datetime64[ns]
# df["出生日期"] = df["出生日期"].str.replace("1","") # 錯誤用法,str只能為字符串服務
df["出生日期"] = df["出生日期"].dt.strftime("%Y-%m-%d") # 轉換為字符串類型
print(df["出生日期"].dtype) # object
df["分數"] = df["分數"].str.replace("分","").astype(int) # 轉換為整數類型
print(df)

輸出如下,我們一個一個做分析,首先我們定義了一個DataFrame,可以發(fā)現初始都是字符串,因此輸出為object,然后我們通過to_datetime將其改成了標準的日期格式,因此輸出為datetime64[ns],同樣我們也可以通過dt.strftime將其轉換為字符串格式,對于字符串格式,我們可以使用str下的若干方法進行處理,上述演示中只是將“分”這個字刪除,并轉換為整型:

姓名      object
出生日期    object
分數      object
dtype: object
==============================
datetime64[ns]
object
   姓名        出生日期  分數
0  張三  2000-01-01  90
1  李四  2001-02-02  29
2  王五  2002-03-03  78
3  趙六  2003-04-04  46
4  王二  2004-05-05  57

同時pandas嚴格約定str只服務于字符串,如果對其他格式使用,則會報錯,對于字符串的處理,還有一個很強大的工具就是正則表達式,我們同樣可以使用正則表達式進行處理,但是注意使用regex=True告訴程序這個是正則表達式:

# 常規(guī)復雜的三步替換
df["出生日期"] = df["出生日期"].str.replace("年","").str.replace("月","").str.replace("日","")
# 正則表達式替換
df["出生日期"] = df["出生日期"].str.replace("[年月日]","",regex=True)

三、DataFrame的連接

如果需要做DataFrame的連接,我們常常使用concat方法,其重要的三個參數分別是

  • axis=0 代表按行連接,否則是按列連接
  • ignore_index=True 表示重新生成一個新的索引,否則保留原始索引
  • join="outer" 表示保留所有非重復字段,join="inner"則表示只保留重合字段
df1 = pd.DataFrame({"A":[1,2,3],
                    "B":[6,7,8]})
df2 = pd.DataFrame({"B":[4,5,6],
                    "F":[9,10,11]})
print(pd.concat([df1,df2],axis=1))
print(pd.concat([df1,df2],axis=0,ignore_index=True,join="outer"))

輸出結果為:

   A  B  B   F
0  1  6  4   9
1  2  7  5  10
2  3  8  6  11
     A  B     F
0  1.0  6   NaN
1  2.0  7   NaN
2  3.0  8   NaN
3  NaN  4   9.0
4  NaN  5  10.0
5  NaN  6  11.0

在輸出中,如果 ignore_index=False ,左側就是原始索引 [0,1,2,0,1,2],而如果使用join="inner"則只會保留重合的B列

同時Concat還支持DataFrameSeries的混合拼接,例如:

sr1 = pd.Series([1,2,3],name="sr1")
sr2 = pd.Series([6,7,8,],name="sr2")

print(pd.concat([sr1,df1,df2,sr2],axis=1)) # 混合拼接

輸出結果為:

   sr1  A  B  B   F  sr2
0    1  1  6  4   9    6
1    2  2  7  5  10    7
2    3  3  8  6  11    8

四、EXCEL表格批量合并和拆分

4.1 批量進行表格合并

之前我們已經學習了那么多的pandas使用技巧,那么接下來我們就看看上面講到的比如Concat在實際過程中有什么用吧,比如我們先看一下批量的合并,既然要合并,不過就是DataFrame的拼接,在某個文件夾下有若干個xlsx文件,我們需要合并到一張表里,這些子表的表頭都是相同的:

那么我們通過下面的程序進行合并,首先獲取文件夾下所有的xlsx文件,然后讀取DataFrame,緊接著添加一個標識列,代表從哪個數據表中拿到的,最后合并并保存,在這里Concat就起到了將各個DataFrame合并在一起的功能

son_file_path = r"C:\Users\22330\Desktop\進行中\(zhòng)子文件"
file_to_save = r"C:\Users\22330\Desktop\進行中\(zhòng)Data_combine.xlsx"
df_lists = [] # 用于存儲每個子文件的DataFrame
for item in os.listdir(son_file_path):
    if item.endswith(".xlsx"):
        file_path = os.path.join(son_file_path,item)
        df = pd.read_excel(file_path)
        df["son_id"] = item.split(".")[0] # 提取子文件的id作為新的一列
        df_lists.append(df) # 將當前子文件的DataFrame添加到列表中
# 使用Concat合并所有子文件的DataFrame
pd.concat(df_lists,axis=0).to_excel(file_to_save,index=False)

最后輸出的文件中,就會多出我們新增的一列son_id,整個的處理非常迅速。

4.2 批量進行表格拆分

既然已經講了合并,我們順手也來看看拆分,我們的拆分需求是將表格平均分到若干個表里,在下面的程序中,我通過son_file_num 定義了要拆分的個數,通過考慮了除不盡的情況,然后依次按索引取值,放到每個表中

import pandas as pd
import os

file_path = r"C:\Users\22330\Desktop\進行中\(zhòng)Data.xlsx"
save_path = r"C:\Users\22330\Desktop\進行中\(zhòng)子文件"
if not os.path.exists(save_path): # 如果子文件目錄不存在,就創(chuàng)建一個
    os.mkdir(save_path)
df = pd.read_excel(file_path)
print(df.head(3)) # 查看前3行數據
print(df.shape) # 查看數據條數和特征數

son_file_num = 4
son_file_size = df.shape[0] // son_file_num # 每個子文件的數據條數
if df.shape[0] % son_file_num != 0: # 如果數據條數不能被子文件數整除,需要額外增加一條數據
    son_file_size += 1

for i in range(son_file_num):
    start = i * son_file_size
    end = start + son_file_size
    df_son = df.iloc[start:end] # 這里的end是不包含在切片中的,所以不需要-1
    df_son.to_excel(f"{save_path}\{file_path.split('.')[1]}_{i}.xlsx",index=False)

命令行輸出了我們的一些調試信息,可想而知,會按152:152:152:150 的比例分配數據,實現拆分

        出庫日期       產品經理  產品類別  地區(qū) 安全等級  銷售額(元)  銷售數量  客戶評分
0 2023-06-01      Jerry  電子產品  西南    C  3789.6    12   5.0
1 2023-06-02       Cary    服裝  華東    A  2345.3    14   5.0
2 2023-06-03  Bob-Smith  家居用品  西北    D   567.8     7   3.7
(606, 8)

到此這篇關于Pandas基礎使用指南之排序、字符串日期處理和文件合并拆分技巧的文章就介紹到這了,更多相關Python Pandas使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python讀取Json字典寫入Excel表格的方法

    Python讀取Json字典寫入Excel表格的方法

    這篇文章主要為大家詳細介紹了Python讀取Json字典寫入Excel表格的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python的sorted用法詳解

    python的sorted用法詳解

    在本篇文章里小編給大家整理了關于python的sorted用法以及相關實例內容,有需要的朋友們參考學習下。
    2019-06-06
  • python+selenium開發(fā)環(huán)境搭建圖文教程

    python+selenium開發(fā)環(huán)境搭建圖文教程

    這篇文章主要為大家詳細介紹了python+selenium開發(fā)環(huán)境搭建的圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • python中numpy矩陣的零填充的示例代碼

    python中numpy矩陣的零填充的示例代碼

    本文主要介紹了python中numpy矩陣的零填充的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • 使用DataFrame高效地存放和管理多維數據的方法

    使用DataFrame高效地存放和管理多維數據的方法

    在數據分析領域,處理多維數據是日常任務的核心部分,Python中的Pandas庫提供的DataFrame結構,以其靈活性和強大的功能,成為存放和處理多維數據的理想選擇,本文將深入探討如何使用DataFrame高效地存放和管理多維數據,需要的朋友可以參考下
    2026-02-02
  • Python利用socket實現多進程的端口掃描器

    Python利用socket實現多進程的端口掃描器

    作為開發(fā)人員經常需要查看服務的端口開啟狀態(tài)判斷服務是否宕機。特別是部署的服務比較多的情況下,可能存在幾個甚至幾十個服務端口的占用。所以本文將利用socket實現多進程的端口掃描器,需要的可以參考一下
    2022-12-12
  • Python封裝git命令的流程步驟

    Python封裝git命令的流程步驟

    在日常的 Android 項目開發(fā)中,一般只會使用到: git add, git commit, git push, git pull, git rebase, git merge, git diff等常規(guī)命令,但是使用 git 命令,還可以做一些特別的事情,下面將介紹使用 python 封裝 git 命令,需要的朋友可以參考下
    2024-01-01
  • Python??序列化反序列化和異常處理的問題小結

    Python??序列化反序列化和異常處理的問題小結

    這篇文章主要介紹了Python?序列化反序列化和異常處理,本文結合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • 深入挖掘Python自定義加密算法的設計與實現

    深入挖掘Python自定義加密算法的設計與實現

    這篇文章主要為大家詳細介紹了Python中自定義加密算法的設計與實現的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-12-12
  • 詳解KMP算法以及python如何實現

    詳解KMP算法以及python如何實現

    這篇文章主要介紹了KMP算法的相關知識以及python如何實現,幫助大家更好的進行數據分析,感興趣的朋友可以了解下
    2020-09-09

最新評論

舞钢市| 麦盖提县| 乡宁县| 扬中市| 巩留县| 富顺县| 平昌县| 青浦区| 惠东县| 玉溪市| 宜君县| 东辽县| 牙克石市| 喜德县| 依兰县| 贞丰县| 秦皇岛市| 襄城县| 安顺市| 应用必备| 蒙阴县| 兴业县| 鹤峰县| 华池县| 崇文区| 濮阳市| 全州县| 中山市| 福州市| 临猗县| 阿勒泰市| 晋宁县| 上犹县| 辽源市| 汉源县| 宁城县| 余干县| 曲沃县| 凌海市| 安塞县| 阿荣旗|