主頁 >  其他 > 10張思維導圖,一文吃透 Pandas 技術細節

10張思維導圖,一文吃透 Pandas 技術細節

2021-12-31 08:37:57 其他

哈嘍,大家好,今天我講給大家介紹 Python 中非常重要的一個庫:Pandas,

Pandas 是一個基于 Numpy 的強大工具集,用于資料處理、分析、挖掘和可視化,

所有技術細節,我已整理一張 Pandas 知識結構的思維導圖,文末有獲取方式,

下面我們用 10 個小節來學習 Pandas,程序簡潔,思路清楚,喜歡本文,點贊、收藏、關注,

廢話不多說,我們開始吧!

1. 資料結構

Pandas中有兩種資料結構SeriesDataFrame

Series用一維陣列,可以存盤不同型別的資料,

>>> import pandas as pd
>>> import numpy as np
>>> pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
a    0.881931
b   -0.112222
c    0.470156
d    0.394478
e    0.704801
dtype: float64

pd.Series()函式用來創建Series物件,

第一個引數是存盤的資料,這里是 Numpy 隨機生成的一維陣列,

第二個引數index是資料對應的索引,在 Python list或 Numpy 中陣列的索引都是數字,也稱為下標,但在 Pandas 中索引可以是任意型別,

DataFrame是二維結構,類似 Excel 或資料庫中的表,

>>> d = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
>>> df = pd.DataFrame(d)
>>> df
   one  two
a  1.0  1.0
b  2.0  2.0
c  3.0  3.0
d  NaN  4.0

pd.DataFrame()函式用來創建DataFrame物件,

這里用字典d創建DataFrame物件,d中的兩個鍵值對作為DataFrame兩列,作為列名,Series物件作為列值,

創建SeriesDataFrame物件的方式還有很多

圖片

Pandas資料結構

在 Pandas 中用DataFrame的頻率更高,下面的介紹以DataFrame為主,

2. 查看資料

上面創建的DataFrame只有幾條資料,一眼就看完了,如果資料量比較大,就需要借助一些函式來查看,

通過屬性查看DataFrame基本情況,如:indexcolumnsshape

>>> df.index
Index(['a', 'b', 'c', 'd'], dtype='object')

通過head()tail()函式查看DataFrame明細資料

>>> df.head(2)
   one  two
a  1.0  1.0
b  2.0  2.0

通過describe()查看DataFrame每列統計摘要

>>> df.describe()
       one       two
count  3.0  4.000000
mean   2.0  2.500000
std    1.0  1.290994
min    1.0  1.000000
25%    1.5  1.750000
50%    2.0  2.500000
75%    2.5  3.250000
max    3.0  4.000000

圖片

查看資料

3. 索引

索引在 Pandas 中非常重要,通過索引我們可以獲取 SeriesDataFrame中的任意資料,

Pandas的既有行索引,也有列索引,

3.1 索引的創建與轉化

索引除了創建SeriesDataFrame時指定,也可以單獨創建,

>>> index = pd.Index(['e', 'd', 'a', 'b'])
>>> columns = pd.Index(['A', 'B', 'C'], name='cols')
>>> df = pd.DataFrame(np.random.randn(4, 3), index=index, columns=columns)
>>> df
cols         A         B         C
e    -0.037910 -1.032842 -1.658740
d    -0.784543  0.649506  0.928499
a     0.901721  0.022041 -0.515617
b    -0.443420 -0.246031 -0.803685

通過pd.Index分別創建行列索引indexcolumns,并用于創建 DateFrame

圖片

3.2 索引排序

sort_index函式對上面的df行索引排序

>>> df.sort_index(axis=0)
cols         A         B         C
a     2.180095 -1.820624  0.046273
b    -0.607010 -0.123721  1.375773
d    -0.057358 -1.403620  0.462811
e    -1.672218  1.299837  0.055571

Pandas 函式里經常會見到 axis 引數,用來指定行索引或列索引

  • axis=0 等價于 axis=‘index’

  • axis=1 等價于 axis=‘columns’

axis=0 表示行索引或者行索引對應的列值,因此,axis=0表示處理每列資料,同樣地,axis=1表示處理每行資料,

3.3 用索引訪問資料

通過[]形式直接獲取某列或某行

>>> # 訪問A列,等價于 df.A
>>> df['A'] 
e   -1.672218
d   -0.057358
a    2.180095
b   -0.607010

>>> df[:1] # 切片訪問第一行
cols         A         B         C
e    -1.672218  1.299837  0.055571

通過標簽選擇器.loc.at,可按照索引名訪問資料,iloc獲取切片,.at獲取標量,

>>> df
cols         A         B         C
e    -1.672218  1.299837  0.055571
d    -0.057358 -1.403620  0.462811
a     2.180095 -1.820624  0.046273
b    -0.607010 -0.123721  1.375773
>>> #獲取a b兩行, A B兩列資料
>>> df.loc[['a', 'b'], ['A', 'B']]
cols         A         B
a     2.180095 -1.820624
b    -0.607010 -0.123721
>>> #獲取a行, A列元素
>>> df.at['a', 'A']
2.180094959110999

通過位置選擇器.iloc.iat,可按照索引位置訪問資料,

之前 Pandas 還可以通過ixreindex函式訪問資料,現在都不推薦使用了,

還可以通過布爾索引篩選滿足條件的資料

>>> #獲取A列大于0的行
>>> df[df.A > 0]
cols         A         B         C
a     2.180095 -1.820624  0.046273

初次學習布爾索引可能會覺得難以理解,這里來拆解一下,幫助大家理解,

第一步,看df.A > 0的回傳值

mask = df.A > 0
mask
>>> mask
e    False
d    False
a     True
b    False
Name: A, dtype: bool

df.A > 0回傳的是Series一維陣列,索引跟df一樣,取值bool型別,

第二步,將mask應用在df

>>> df[mask]
cols         A         B         C
a     2.180095 -1.820624  0.046273

因為maskbool型別,True表示保留該行索引,False表示丟棄該行索引,這里只有索引e取值為True,所以只保留e行,

布爾索引中通過|&~連接不同的判斷條件,分別代表

圖片

基礎訪問方式

3.4 其他函式

Pandas 中還定義了很多有用的函式,可以靈活地訪問、獲取資料,如:isin()where()query()

圖片

其他函式

3.5 多級索引

之前我們接觸的DataFrame行列索引只有一層,Pandas 還支持多級(多層)索引,

多層索引并不難理解,將單層索引的某個值替換成元組,就是多層索引,用法上二者有相似之處,

3.5.1 索引創建與獲取

一般我們可以通過pd.MultiIndex創建多級索引

>>> # 通過元組串列創建2級行索引
>>> index = pd.MultiIndex.from_tuples([('bar', 'one'),('bar', 'two'),('baz', 'one'),('baz', 'two')], names=['first', 'second'])
>>> df = pd.DataFrame(np.random.randn(4, 2), index=index)
>>> df
                     0         1
first second                    
bar   one     0.813204  0.817983
      two    -0.304902  0.396040
baz   one    -0.634707  0.665182
      two     0.246232 -0.609914

圖片

多級索引創建與獲取

3.5.2 多級索引訪問

同樣可以通過[].loc等方式訪問多級索引,

>>> df
                     0         1
first second                    
bar   one     0.813204  0.817983
      two    -0.304902  0.396040
baz   one    -0.634707  0.665182
      two     0.246232 -0.609914
>>> # 獲取從('bar', 'one')到('bar', 'two')的行,0列
>>> df.loc[('bar','one'):('bar', 'two'), 0]
first  second
bar    one       0.813204
       two      -0.304902
Name: 0, dtype: float64

>>> # 獲取第0層行索引,bar到baz之間所有行
>>> df.loc[(slice('bar', 'baz'), slice(None)), :]
                     0         1
first second                    
bar   one     0.813204  0.817983
      two    -0.304902  0.396040
baz   one    -0.634707  0.665182
      two     0.246232 -0.609914

圖片

多級索引訪問

3.5.3 其他函式

圖片

4 遍歷

除了上面的訪問方式,Pandas 還支持遍歷的方式訪問 SeriesDataFrame中的資料,

4.1 回圈方式

可以使用for回圈遍歷DataFrame每行、每列,

df.iterrows()函式可遍歷行,df.items()函式可遍歷列

>>> df[:2]
                     0         1
first second                    
bar   one     0.813204  0.817983
      two    -0.304902  0.396040
>>> for index, row in df[:2].iterrows():
...   print(index)
...   print(row)
... 
('bar', 'one')
0    0.813204
1    0.817983
Name: (bar, one), dtype: float64
('bar', 'two')
0   -0.304902
1    0.396040
Name: (bar, two), dtype: float64
4.2 函式方式

df.apply()函式遍歷行或列,并接收函式作為引數,用來對行、列處理,

df.applymap() 函式遍歷所有元素,接收函式作為引數,用來處理處理,

圖片

遍歷

5 運算

只能獲取資料還不夠,我們還需能對資料做計算,

5.1 二元運算

可以用運演算法,也可以用函式對DataFrame做四則運算,

以加法為例

>>> df
   a  b
0  1  3
1  2  4
>>> df2
   a  b
0  5  7
1  6  8
>>> # df + 1,等價于 df.add(1)
>>> df + 1
   a  b
0  2  4
1  3  5
>>> # df + df2,等價于 df.add(df2)
>>> df+df2
   a   b
0  6  10
1  8  12

這里的運算回傳新的DataFrame,而不會改變df中的值,

另外,Pandas 還支持反向運演算法,如:df.rdiv(df2) 等價于 df2 / df

圖片

二元運算

5.2 計算工具

Pandas 還提供了很多好用的計算工具,幫助我們快速完成計算,

df.cov()函式為例,呼叫該函式,可以回傳列與列之間的協方差,

>>> df.cov()
     a    b
a  0.5  0.5
b  0.5  0.5

圖片

計算工具

6 分組統計

分組統計是 Pandas 資料分析最常用的功能,

6.1 分組統計

Pandas 可以對 DataFrame按照行、按列、行+列的方式分組,

>>> df
    a  b
0  a1  1
1  a2  2
2  a1  3
>>> # 按a列分組
>>> df.groupby('a')
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7fafbe6f4a30>
>>> # 按第0層行索引分組
>>> df.groupby(level=0)
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7fafbe6f49a0>
>>> # 按第0層行索引和a列,分組計數
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7fafbe70bac0>

圖片

分組方式

6.2 分組遍歷

分完組后,我們可以獲取單個分組結果,或者遍歷所有分組,

>>> for name, group in df.groupby('a'):
...     print(group)
...     print(name)
... 
    a  b
0  a1  1
2  a1  3
a1
    a  b
1  a2  2
a2

namea列取值,group是每個分組DataFrame

圖片

分組遍歷

6.3 分組聚合

分組的最終目的就是為了對每個分組的資料做聚合統計,

Pandas 提供了一些內置的聚合函式,下面列舉一些常見的

圖片

同時,也支持 Numpy 的聚合函式和自定義聚合函式,

可以指定1個聚合函式,也可以指定多個聚合函式,甚至還可以對不同列指定不同的聚合函式,

>>> df
    a  b  c
0  a1  1  4
1  a2  2  5
2  a1  3  6
>>> # 對a列分組求和
>>> df.groupby("a").sum()
    b   c
a        
a1  4  10
a2  2   5
>>> # 對a列分組,對b c列求和、求均值
>>> df.groupby("a").agg([np.sum, np.mean])
     b        c     
   sum mean sum mean
a                   
a1   4  2.0  10  5.0
a2   2  2.0   5  5.0
>>> # 對a列分組,b列求和,c列用自定函式求方差
>>> df.groupby("a").agg({"b": np.sum, "c": lambda x: np.std(x, ddof=1)})
    b         c
a              
a1  4  1.414214
a2  2       NaN

圖片

分組聚合

7. 重塑和透視

之前無論對DataFrame做什么操作,都不會改變它的結構,這部分我們會改變DataFrame的形狀,即:改變現有的行列結構,

pd.stack()將列索引變成行索引,

圖片

stack

pd.unstack()pd.stack()的反向操作

圖片

unstack

pd.melt(),保留某幾列,將剩下的列“融化”掉,生成兩個新列,一個存放被“融化”的列名,另一個存放被“融化”的列值,

圖片

pd.pivot()類似 Excel 中的透視表,任意指定新的行列值,

圖片

pd.pivot_table()提供了透視表的聚合功能,

圖片

重塑和透視

8. 合并

Pandas 提供了一些函式,可以將多個DataFrame合并,既可以按行和并也可以按列合并,

這些函式的功能類似 SQL 中的unionjoin

pd.concat()為例,按列合并

pd.concat([df1, df2, df3])

圖片

按行和并

pd.concat([df1, df4], axis=1)

圖片

圖片

9. 可視化

Pandas 集成了 Matplotlib ,可以幫助我們快速作圖,

ts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2000", periods=1000))
df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list("ABCD"))
df = df.cumsum()
plt.figure()
df.plot()

圖片

折線圖

圖片

可是化

10. 特殊資料型別

Padans 對某些特殊資料型別提供一些函式,方便資料處理,

字串型別的資料,提供字串分割、拼接、提取等函式,

缺失值,提供填充、插值和洗掉等函式

日期型別,提供日期加減、日期間隔等函式,

圖片

特殊資料型別

至此,我們通過 10 個小節把 Pandas 常用的功能講完了,完整的思維導圖可以如下方式獲取,

下載方式

我把這20個模板 已打包,放置后臺,獲取方法如下:

  • 方法1、微信搜索公眾號:Python學習與資料挖掘,后臺回復:pandas
  • 方法2、掃描二維碼或者發送圖片到微信識別,后臺回復:pandas
    在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/398592.html

標籤:AI

上一篇:R語言進行dataframe資料左連接(Left join):使用R原生方法、data.table、dplyr等方案

下一篇:NLP 實戰 (9) | CSDN topN指數月排行榜競賽影片

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more