主頁 > 後端開發 > ??兩萬字,50個pandas高頻操作【圖文并茂,值得收藏】??

??兩萬字,50個pandas高頻操作【圖文并茂,值得收藏】??

2021-09-20 11:52:04 後端開發

重點,敲黑板了

  • 首先,本文遵循,傳統教學,點到為止只介紹個人使用比較頻繁的一些函式或處理方式,
  • 本文的示例只是演示所用,示例一般是不修改原資料的,如果代碼會修改原資料會標明(在原資料上進行修改),自己使用時一定要注意是否修改了原資料,一旦報錯,首先檢查自己的代碼是否改變了原資料,
# 未修改原資料
df.drop('name', axis = 1)  
# 修改原資料
df.drop('name', axis = 1, inplace=True)  
# 修改原資料
df = df.drop('name', axis = 1)  
  • pandas 之所以強大是因為它擁有各種資料處理的函式,各個函式互相組合,靈活多變,并且與 numpymatplotlibsklearn 、>pysparksklearn 等眾多科學計算庫互動,真正想要融會貫通實戰是必經之路,
  • 原創不易,碼字也很累,如果覺得文章不錯,💗 一定記得三連哦💗 ~ 在此提前感謝各位,

文章目錄

    • DataFrame創建
      • 創建空的 DataFrame
      • 常規 DataFrame 創建方式
    • DataFrame存盤
      • 常見存盤方式(csv, json, excel, pickle)
    • DataFrame查看資料資訊
      • 顯示摘要資訊
      • 顯示描述性統計資訊
      • 顯示 前 / 后 n行
      • 顯示索引、列資訊
      • 顯示每列的資料型別
      • 顯示占用的記憶體大小
    • 定位某行資料
      • 使用 loc() 定位
      • 使用 iloc 定位
    • 添加一行資料
      • 使用 loc 定位并添加
      • 使用 append 添加
    • 洗掉資料
      • 根據列名洗掉列
      • 根據索引洗掉行
      • 使用 loc 定位資料并洗掉
      • 使用 del 洗掉列
      • 同時洗掉行、列
      • 洗掉重復值
    • 篩查重復值
      • 判斷某列是否有重復值
      • 判斷 DataFrame 是否有重復行
      • 統計重復行的數量
      • 顯示重復的資料行
    • 缺失值處理
      • 查找缺失值
      • 查找非缺失值
      • 顯示有缺失值的行
      • 洗掉缺失值
      • 填充缺失值
        • 數字或字串填充
        • 用缺失值 前/后 的值填充
        • 用缺失值所在列的 均值/中位數 等填充
    • 列操作
      • 修改列名
      • 修改列型別
      • 將列進行拆分得到多列
      • 將多列合并成新列
      • 對數值列磁區
    • 排序
      • 索引排序
      • 重置索引
      • 值排序
      • 創建排名列
    • 分組
      • 對行分組統計
      • 對不同列使用不同的統計函式
    • DataFrame合并
      • merge()
      • concat()
      • append()
    • DataFrame時間處理
      • 將字串列轉化成時間序列
      • 將時間列作為索引
      • 獲取時間的各個屬性
      • 重采樣 resample()
    • DataFrame遍歷方式
      • iterrows() - 遍歷行(索引,列值序列)
      • iteritems() - 遍歷(列名,值)
      • itertuples() - 遍歷行 (索引,列值A,列值B..)

DataFrame創建

創建空的 DataFrame

創建一個空的 , 包含三行空資料,

df = pd.DataFrame(columns=['name', 'age'], index=[0, 1, 2])

常規 DataFrame 創建方式

這里只介紹常見的三種,陣列創建、字典創建、外部檔案創建,常見檔案讀取的時候直接指定檔案路徑即可,對于 xlsx 檔案可能存在多個 sheet 這時就需要指定 sheet_name

# 陣列創建
df = pd.DataFrame(data=[['路飛', 18],
                       ['索隆', 19],
                       ['娜美', 18]],
                  columns=['name', 'age'])
# 通過字典創建
df = pd.DataFrame({'name': ['路飛','索隆', '娜美'],
					 'age':[18, 19, 18]})
# 通過外部檔案創建,csv,xlsx,json等
df = pd.read_csv('XXX.csv')



DataFrame存盤

常見存盤方式(csv, json, excel, pickle)

保存時,一般情況下是不需要保存索引的,因為讀取的時候會自動生成索引,

df.to_csv('test.csv', index=False)  # 忽略索引
df.to_excel('test.xlsx', index=False)  # 忽略索引
df.to_json('test.json')  # 保存為json
df.to_pickle('test.pkl')  # 保存為二進制格式


DataFrame查看資料資訊

顯示摘要資訊

在我們使用 DataFrame 之前都會查看資料的資訊,個人首選 info ,它展現了資料集的行列資訊,以及每列中的非空值的數量,

df.info()

顯示描述性統計資訊

能夠較為直觀的查看數值列的基本統計資訊,

df.describe()

顯示 前 / 后 n行

默認顯示5行,可指定顯示的行數,

df.head(n)  # 可指定整數,輸出前面n行
df.tail(n)  # 可指定整數,輸出后面n行

顯示索引、列資訊

顯示索引及列的基本資訊,

df.columns  # 列資訊
df.index  # 索引資訊

顯示每列的資料型別

顯示列的名稱及對應的資料型別,

df.dtypes

顯示占用的記憶體大小

顯示給列占用記憶體的大小,單位是 :位元組(byte),

df.memory_usage()



定位某行資料

重點:無論是 loc 還是 iloc 使用的要領都是先指定行,再指定列,并且行與列運算式用 分隔,如:df.loc[:, :] 獲取所有行所有列的資料,

使用 loc() 定位

比如現在要定位 [索隆] 這行資料,有以下

df.loc[1, :]  # loc[index , columns] 行索引,列名,回傳 Series 物件
df.loc[df['age'] > 18]  # 回傳 DataFrame 物件
# 或者 df[df['age'] > 18]
# df.loc[df['name'] == '索隆']

使用 iloc 定位

使用 iloc 取第二行(索引從0開始),所有列的資料,

df.iloc[1, :]  # iloc[index1, index2] 行索引, 列索引



添加一行資料

使用 loc 定位并添加

使用 loc 定位到 index = 3 的行,再進行賦值(在原資料上進行修改)

df.loc[len(df)] = ['喬巴', 3]

使用 append 添加

append 添加資料時需要指定列名,列值,如果某列未指定的話,則默認填充 NaN

df.append({'name': '山治', 'age': 19}, ignore_index=True)


洗掉資料

根據列名洗掉列

使用 drop 來洗掉某列,指定要洗掉的軸,與對應 列/行名稱/索引

df.drop('name', axis = 1)  # 洗掉單列
df.drop(['name', 'age'], axis = 1)  # 洗掉多列

根據索引洗掉行

與上面洗掉列的方式相似,不過這里指定的是索引,

df.drop(0, axis=0)  # 洗掉單行
df.drop([0, 1], axis=0)  # 洗掉多行

使用 loc 定位資料并洗掉

先使用 loc 定位某條件的資料,再獲取索引 index ,然后使用 drop 洗掉,

df.drop(df.loc[df['name'] == '娜美'].index, axis=0)  # 洗掉定位到的行

使用 del 洗掉列

del在原資料上進行修改,使用是要注意,

del df['age']

同時洗掉行、列

drop 也可以同時指定行列進行洗掉,這里洗掉第一、二行并洗掉 age 列,

df.drop(columns=['age'], index=[0, 1])

洗掉重復值

  • 指定 subset ,則根據指定的列作為參考進行去重,即如果某兩行 a 值相同,則會洗掉第二次的出現的那一行,只保留第一次
  • 不指定 subset ,則根據所有列作為參考進行去重,只有兩行資料 完全相同 才會進行去重,
df.drop_duplicates(subset=['a'], keep='first')
df.drop_duplicates(keep='first')



篩查重復值

示例資料

df = pd.DataFrame({'name':['Python',
                        'Python',
                        'Java',
                        'Java',
                        'C'],
                   'count': [2, 2, 6, 8, 10]})

在這里插入圖片描述

判斷某列是否有重復值

使用 values_counts() 對列中各值出現次數進行統計,結果默認按照降序進行排列,只需要判斷第一行值的出現次數是否為1即可判斷是否存在重復值,

df['a'].value_counts()

在這里插入圖片描述

使用 drop_duplicates() 對重復值進行洗掉,只保留第一次出現的值,判斷處理后的值是否與原 df 相等,如果 False 就表示有重復值,

df.equals(df.drop_duplicates(subset=['a'], keep='first'))

False

判斷 DataFrame 是否有重復行

同樣是使用 drop_duplicates() 對重復值進行洗掉,只保留第一次出現的值,此時不使用 subset 引數設定列,默認為全部列,判斷處理后的值是否與原 df 相等,如果 False 就表示有重復值,

df.equals(df.drop_duplicates(keep='first'))

False

統計重復行的數量

注意這里的統計是參照所有列來的,只有兩行完全相同才會判斷為重復行,所以統計的結果是 1 ,

len(df) - len(df.drop_duplicates(keep="first"))

1

顯示重復的資料行

先洗掉重復的行,只保留第一次出現的,得到一個 行唯一 的資料集,再使用 drop_duplicates() 洗掉掉 df 中存在重復的所有資料,這次不保留第一次出現的重復值,將上述兩個結果集進行合并,使用 drop_duplicates() 對新生成的資料集進行去重,即可得到重復行的資料,

df.drop_duplicates(keep="first")\
  .append(df.drop_duplicates(keep=False))\
  .drop_duplicates(keep=False)

在這里插入圖片描述

缺失值處理

查找缺失值

缺失值為 True ,非缺失值為 False

df.isnull()

查找非缺失值

非缺失值為 True ,缺失值為 False

df.notnull()

顯示有缺失值的行

.isnull:查找缺失值,主要為了將缺失值的位置標 True
.T:行列轉置,為下一步 any 做準備,
.any:一個序列中滿足一個 True,則回傳 True

df[df.isnull().T.any()]

在這里插入圖片描述

洗掉缺失值

這里的引數需要注意的比較多,這里著重講一下,

  • axis:0 行,1 列
  • how
    • any:如果有 NaN,洗掉該行或列,
    • all:如果所有值都是 NaN,洗掉該行或列,
  • thresh:指定 NaN 的數量,當 NaN 數量達到才洗掉,
  • subset:要考慮的資料范圍,如:洗掉缺失行,就用subset指定參考的列,默認是所有列,
  • inplace:是否修改原資料,
# 某行如果有缺失值,則洗掉這一行
df.dropna(axis=0, how='any')  
# 某列如果有缺失值,則洗掉這一列
df.dropna(axis=1, how='any')  

填充缺失值

數字或字串填充

直接指定要填充的數字或字串,

df.fillna(0)

用缺失值 前/后 的值填充

  • 用缺失值的前一個值(該列上面一個值)填充,如果缺失值在第一行則不填充
  • 用缺失值的后一個值(該列下面一個值)填充,如果缺失值在最后一行則不填充
df.fillna(method='pad')
df.fillna(method='bfill')

用缺失值所在列的 均值/中位數 等填充

可以用該列的統計資訊來進行填充,如使用 meanmedianmaxminsum 填充等,

df.fillna(df.mean())



列操作

修改列名

df.columns 是直接指定新的列名來替換所有的列名, (在原資料上進行修改)
rename() 需要指定原名與新名來進行替換,

df.columns = ['new_name', 'new_age']
df.rename(columns=({'name':'new_name','age':'new_age'}))

修改列型別

使用 astype 來修改列型別,

df['age'].astype(str)

將列進行拆分得到多列

split 只能對字串列進行拆分,

df[['name1', 'name2']] = df['name'].str.split(',', expand=True)

將多列合并成新列

同樣合并也是字串型別的列才能進行合并,

df['all'] = df['name'] + '/' + df['age'].astype(str)

對數值列磁區

對于數值列,實際使用的時候可能需要根據指定的范圍,將這些數值變為標簽值,如衡量產品的指標及格、不及格,成績是否優秀等,使用是需要指定數值列、各個標簽的臨界值,臨界值的開閉情況(示例中:默認 left=True ,指定 right=False ,即左閉右開),最后指定標簽的名稱即可,

df['評價'] = pd.cut(df['成績'], [0, 60, 80, np.inf],
			 right=False, labels=['不及格', '良好', '優秀'])



排序

索引排序

對行索引降序排序

df.sort_index(axis=0, ascending=False)

對列索引降序排序

df.sort_index(axis=1, ascending=False)

重置索引

將索引重新排序,原來的索引不保留,

df.reset_index(drop=True)

值排序

先按照名字降序排序,再對相同名字下的成績進行降序排序,

df.sort_values(by=['名字', '成績'], axis=0, ascending=False)

創建排名列

使用 rank 來進行排名,主要引數 method 的取值含義如下:

method含義
average默認值,在名次一樣的分組中,為各個值分配平均排名(平均數),排名之間存在跳躍
min使用分組中的最小排名,排名之間存在跳躍
max使用分組中的最大排名,排名之間存在跳躍
first按值在原始資料中的出現順序進行排名,排名之間存在跳躍
dense同一個分組的排名相同,排名之間不存在跳躍

現在按照 成績 列對每行資料進行排名,并新建排名列,幾種排名方式下面都已給出,

df['排名'] = df['成績'].rank(method='average', ascending=False)



分組

對行分組統計

現在對各人的成績進行分組計算,分別計算總和、均值、最大值,

df.groupby(['名字']).sum()
df.groupby(['名字']).mean()
df.groupby(['名字']).max()

在這里插入圖片描述
注意:此時的索引為 名字,如果想要重置索引,可以使用如下方式,

df.groupby(['名字']).sum().reset_index()

在這里插入圖片描述

對不同列使用不同的統計函式

agg() 是指定函式使用在某個數列上,然后回傳標量值,
apply() 是先將資料拆分 >>> 再應用 >>> 最后匯總的程序(只能應用單個函式),回傳多維的資料,

df.groupby(['名字']).agg({'成績':['sum','mean','max']})
df.groupby(['名字']).apply(max)

在這里插入圖片描述



DataFrame合并

pandas中的合并函式主要是:merge()concat()append(),一般用來連接兩個及以上 DataFrame ,其中,concat(), append() 用來縱向連接 DataFrame 物件, merge() 用來橫向連接 DataFrame 物件,

三者對比:

concat()

  • 連接多個DataFrame
  • 設定特定的鍵(key)

append()

  • 連接多個DataFrame

merge()

  • 指定列來連接DataFrame

merge()

on 若指定則該列必須同時出現在這兩個 DataFrame 中,默認值為兩個 DataFrame 列中的交集,在本例中即使不指定 on ,實際默認值也會按照 name 列來進行合并,
how 引數詳解:

  • inner:根據 on 指定的列取交集,
  • outer:根據 on 指定的列取并集,
  • left:根據 on 指定的列并以左連接的方式合并,
  • right:根據 on 指定的列并以右連接的方式合并,
pd.merge(df1, df2, on='name', how = "inner")
pd.merge(df1, df2, on='name', how = "outer")
pd.merge(df1, df2, on='name', how = "left")
pd.merge(df1, df2, on='name', how = "right")

在這里插入圖片描述

concat()

concat() 可以多個 DataFrame 進行合并,根據實際情況可以選擇縱向合并還是橫向合并,具體看下面的示例,

# 多個DataFrame縱向合并取交集
pd.concat([df1, df2], ignore_index=True, join='inner',axis=0)
# 多個DataFrame縱向合并取并集
pd.concat([df1, df2], ignore_index=True, join='outer',axis=0)
# 多個DataFrame橫向合并取交集
pd.concat([df1, df2], ignore_index=False, join='inner',axis=1)
# 多個DataFrame橫向合并取并集
pd.concat([df1, df2], ignore_index=False, join='outer',axis=1)


另外還可以指定 key ,在索引的位置添加原資料的名稱,

pd.concat([df1, df2], ignore_index=False, join='outer', keys=['df1', 'df2'])

在這里插入圖片描述

append()

append() 常用于縱向合并,也可以多個 DataFrame 進行合并,

df1.append(df2, ignore_index=True)
df1.append([df1, df2], ignore_index=True)

在這里插入圖片描述



DataFrame時間處理

示例資料
在這里插入圖片描述

將字串列轉化成時間序列

有時從 csv 或 xlsx 檔案中讀取的時間,是字串(Object)型別,這時就需要將其轉化成 datetime 型別,方便后續對時間的處理,

pd.to_datetime(df['datetime'])

將時間列作為索引

對于大部分時間序列資料,我們都可以將該列作為索引,來最大的利用時間,這里 drop=False 選擇不洗掉 datetime 列,

df.set_index('datetime', drop=False)

在這里插入圖片描述

通過索引獲取 1月 的資料,這里顯示前五行,

df.loc['2021-1'].head()

在這里插入圖片描述

通過索引獲取 1~3月 的資料,

df.loc['2021-1':'2021-3'].info()

在這里插入圖片描述

獲取時間的各個屬性

這里給出一般需求中可能會用到的屬性,同時給出各個方法的實體,

常見屬性描述
date獲取日期
time獲取時間
year獲取年份
month獲取月份
day獲取天
hour獲取小時
minute獲取分鐘
second獲取秒
dayofyear資料處于一年中的第幾天
weekofyear資料處于一年中的第幾周(新版使用 isocalendar().week)
weekday資料處于一周中的第幾天(數字 周一為0)
day_name()資料處于一周中的第幾天(英文 Monday)
quarter資料處于一年中的第幾季度
is_leap_year是否為閏年

這里隨便選第 100 行的日期做示例,各個屬性的結果均以注釋的形式展示,

df['datetime'].dt.date[100]
# datetime.date(2021, 4, 11)
df['datetime'].dt.time[100]
# datetime.time(11, 50, 58, 995000)
df['datetime'].dt.year[100]
# 2021
df['datetime'].dt.month[100]
# 4
df['datetime'].dt.day[100]
# 11
df['datetime'].dt.hour[100]
# 11
df['datetime'].dt.minute[100]
# 50
df['datetime'].dt.second[100]
# 58
df['datetime'].dt.dayofyear[100]
# 101
df['datetime'].dt.isocalendar().week[100]
# 14
df['datetime'].dt.weekday[100]
# 6
df['datetime'].dt.day_name()[100]
# 'Sunday'
df['datetime'].dt.quarter[100]
# 2
df['datetime'].dt.is_leap_year[100]
# False

重采樣 resample()

重采樣分為 降采樣升采樣 兩種,

降采樣指的是采樣的時間頻率低于原時間序列的時間頻率,同時來講就是一個聚合操作,看示例,下面獲取各季度的 count 列平均值,Q 代表 quarter 表示按季度采樣,

df.resample('Q',on='datetime')["count"].mean()

在這里插入圖片描述
注意:此時的輸出的最大時間為06-30, 并不是實際資料中的 05-31, 但是并不影響計算,

升采樣與降采樣相反,指的是采樣的時間頻率高于原時間序列的時間頻率,相當于獲取更細緯度的時間資料,但這樣往往會造成資料中存在大量空值,實際用的不多,這里就不展開講解了,



DataFrame遍歷方式

iterrows() - 遍歷行(索引,列值序列)

按行進行遍歷,獲取行的索引與列值序列,速度較慢,直接看例子,

for index, row in df.iterrows():
    print(index)
    print(row)
    print(row['name'])
    print(row['age'])
    break # 演示所用,只顯示一行

在這里插入圖片描述

iteritems() - 遍歷(列名,值)

按列進行遍歷,獲取列名與該列的值,

for column, value in df.iteritems():
    print(column)
    print(value)
    break # 演示所用,只顯示一行

在這里插入圖片描述

itertuples() - 遍歷行 (索引,列值A,列值B…)

按行進行遍歷,獲取行的索引與列值,與 iterrows 的不同之處是索引與列值包含在一起,用 info[0] 獲取索引

for info in df.itertuples():
    print(info[0])
    print(info[1])
    print(info[2])
    break # 演示所用,只顯示一行

在這里插入圖片描述



這就是本文所有的內容了,如果感徑訓不錯的話,? 記得三連支持哦!!!?

在這里插入圖片描述
后續會繼續分享各種干貨,如果感興趣的話可以點個關注不迷路哦~,

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

標籤:python

上一篇:第一次專業記錄

下一篇:簡潔易懂,初學者挑戰學習Python編程30天 (一)

標籤雲
其他(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)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more