新網(wǎng)站 不穩(wěn)定惠州seo代理商
一、安裝,導(dǎo)入
1、安裝
使用包管理器安裝:
pip3 install pandas
2、導(dǎo)入
import pandas as pd
as是為了方便引用起的別名
二、DateFrame
在Pandas庫(kù)中,DataFrame
?是一種非常重要的數(shù)據(jù)結(jié)構(gòu),它提供了一種靈活的方式來(lái)存儲(chǔ)和操作結(jié)構(gòu)化數(shù)據(jù)。DataFrame
?類似于Excel中的表格,具有行和列,其中每列可以是不同的數(shù)據(jù)類型(數(shù)值、字符串、布爾值等)。
1、創(chuàng)建DateFrame
import pandas as pd # 從字典創(chuàng)建 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['New York', 'Los Angeles', 'Chicago']}
df = pd.DataFrame(data) # 從列表的字典創(chuàng)建 DataFrame
data_list = [{'Name': 'Alice', 'Age': 25, 'City': 'New York'}, {'Name': 'Bob', 'Age': 30, 'City': 'Los Angeles'}, {'Name': 'Charlie', 'Age': 35, 'City': 'Chicago'}]
df_list = pd.DataFrame(data_list)
兩個(gè)對(duì)象存儲(chǔ)情況:
?Name ?Age ? ? ? ? City
0 ? ?Alice ? 25 ? ? New York
1 ? ? ?Bob ? 30 ?Los Angeles
2 ?Charlie ? 35 ? ? ?Chicago
? ? ? Name ?Age ? ? ? ? City
0 ? ?Alice ? 25 ? ? New York
1 ? ? ?Bob ? 30 ?Los Angeles
2 ?Charlie ? 35 ? ? ?Chicago
2、查看?DateFrame
# 查看前幾行
print(df.head()) # 查看后幾行
print(df.tail()) # 查看數(shù)據(jù)的基本信息
print(df.info()) # 查看數(shù)值列的統(tǒng)計(jì)信息
print(df.describe())
head和tail括號(hào)內(nèi)都可以寫數(shù)值指定要前幾行。默認(rèn)是5行。
3、選擇數(shù)據(jù)
你可以通過(guò)列名、行標(biāo)簽(索引)或條件來(lái)選擇數(shù)據(jù)。
# 選擇單列
print(df['Name']) # 選擇多列
print(df[['Name', 'Age']]) # 通過(guò)行標(biāo)簽選擇(假設(shè)設(shè)置了索引)
# df.set_index('Name', inplace=True)
# print(df.loc['Alice']) # 通過(guò)條件選擇
print(df[df['Age'] > 30])
當(dāng)你使用?inplace=True
?參數(shù)時(shí),這個(gè)操作會(huì)直接在原DataFrame上進(jìn)行,而不會(huì)返回一個(gè)新的DataFrame。之后,你可以使用?.loc[]
?索引器來(lái)根據(jù)新的索引值選擇數(shù)據(jù)。
可以通過(guò)設(shè)置index屬性自定義輸出的順序。
app=data['apples']
#自定義輸出序列下標(biāo)順序
app=pd.Series(app,index=[0,2,1,3])
執(zhí)行后,會(huì)根據(jù)索引值的0213順序賦值給app.?
4、添加或刪除數(shù)據(jù)
# 添加新列
df = df.assign(Salary=pd.Series([50000, 60000, 70000])) # 刪除列
df = df.drop(columns=['City']) # 刪除行(通過(guò)索引或條件)
# df = df.drop(index=0) # 刪除第一行
# df = df[df['Age'] != 30] # 刪除 Age 為 30 的行
5、數(shù)據(jù)處理
Pandas 提供了豐富的數(shù)據(jù)處理功能,如分組(groupby
)、聚合(aggregate
)、合并(merge
)、連接(join
)等。
# 分組和聚合
grouped = df.groupby('City').agg({'Age': 'mean', 'Salary': 'sum'}) # 合并兩個(gè) DataFrame
df1 = pd.DataFrame({'Key': ['K0', 'K1', 'K2', 'K3'], 'A': ['A0', 'A1', 'A2', 'A3']})
df2 = pd.DataFrame({'Key': ['K0', 'K1', 'K2', 'K3'], 'B': ['B0', 'B1', 'B2', 'B3']})
merged = pd.merge(df1, df2, on='Key')
6、導(dǎo)出數(shù)據(jù)
你可以將?DataFrame
?導(dǎo)出為CSV、Excel等格式的文件。
# 導(dǎo)出為CSV文件
df.to_csv('output.csv', index=False) # 導(dǎo)出為Excel文件
df.to_excel('output.xlsx', index=False)
將index設(shè)置為false可以去掉下標(biāo)。
7、其他操作
(1)轉(zhuǎn)置
print(date.T)
使用DateFrame對(duì)象打點(diǎn)調(diào)用T可以將矩陣進(jìn)行轉(zhuǎn)置,也就是將行轉(zhuǎn)為列,列轉(zhuǎn)為行。
(2)排序
#根據(jù)內(nèi)容排序,ascending=False是降序,默認(rèn)升序
print(date.sort_values(by='A',ascending=False))
也可以根據(jù)索引排序,就是使用date.sort_values。
三、時(shí)間序列和Resample函數(shù)
時(shí)間序列數(shù)據(jù)在Pandas中通常存儲(chǔ)為DataFrame
或Series
對(duì)象,其中時(shí)間戳作為索引。這種結(jié)構(gòu)使得Pandas能夠輕松地對(duì)數(shù)據(jù)進(jìn)行時(shí)間相關(guān)的操作,如按時(shí)間篩選、滾動(dòng)窗口計(jì)算、時(shí)間差計(jì)算等。
resample()
函數(shù)是Pandas時(shí)間序列對(duì)象(DataFrame
或Series
)的一個(gè)方法,它允許用戶按照指定的頻率對(duì)數(shù)據(jù)進(jìn)行重新采樣。重新采樣的過(guò)程通常包括兩個(gè)步驟:首先,根據(jù)新的頻率對(duì)數(shù)據(jù)進(jìn)行分組;其次,對(duì)每個(gè)分組應(yīng)用聚合函數(shù)(如求和、平均、最大值、最小值等)來(lái)計(jì)算新的值。
# 假設(shè)df是一個(gè)時(shí)間序列DataFrame,時(shí)間戳作為索引
# 對(duì)數(shù)據(jù)進(jìn)行按月重新采樣,并計(jì)算每個(gè)月的平均值
monthly_mean = df.resample('M').mean()
參數(shù):
rule
:字符串或數(shù)字,指定新的采樣頻率。on
:可選參數(shù),指定用于重新采樣的列名(如果DataFrame的索引不是時(shí)間戳)。closed
:可選參數(shù),指定區(qū)間的開(kāi)閉性,'left'
、'right'
或None(默認(rèn)為'right')。label
:可選參數(shù),指定標(biāo)簽的位置,'left'
、'right'
或'both'
(默認(rèn)為'right'),或者是一個(gè)時(shí)間戳數(shù)組。convention
:可選參數(shù),指定'start'、'end'或'e'(默認(rèn)為'end'),用于確定在區(qū)間邊界上的值的歸屬。loffset
:可選參數(shù),用于調(diào)整標(biāo)簽的位置。base
:可選參數(shù),用于指定時(shí)間間隔的起始點(diǎn)(0到23之間的整數(shù))。how
或aggregate
:可選參數(shù),指定應(yīng)用于每個(gè)分組的聚合函數(shù)(如'mean'、'sum'等)。在較新版本的Pandas中,建議使用aggregate
參數(shù)。
常用的resample聚合函數(shù)?
-
mean():計(jì)算每個(gè)分組的平均值。這是時(shí)間序列數(shù)據(jù)分析中最常用的聚合函數(shù)之一,用于獲取數(shù)據(jù)的平均水平。
-
sum():計(jì)算每個(gè)分組的總和。這個(gè)函數(shù)可以用于計(jì)算某個(gè)時(shí)間段內(nèi)的累積值。
-
count():計(jì)算每個(gè)分組中非空(非NA/null)值的數(shù)量。這個(gè)函數(shù)可以用于檢查數(shù)據(jù)的完整性或缺失情況。
-
first():獲取每個(gè)分組的第一個(gè)值。這個(gè)函數(shù)可以用于提取時(shí)間序列數(shù)據(jù)中的起始點(diǎn)。
-
last():獲取每個(gè)分組的最后一個(gè)值。這個(gè)函數(shù)可以用于提取時(shí)間序列數(shù)據(jù)中的結(jié)束點(diǎn)。
-
min():計(jì)算每個(gè)分組的最小值。這個(gè)函數(shù)可以用于識(shí)別數(shù)據(jù)中的最低點(diǎn)或閾值。
-
max():計(jì)算每個(gè)分組的最大值。這個(gè)函數(shù)可以用于識(shí)別數(shù)據(jù)中的最高點(diǎn)或峰值。
-
ohlc():計(jì)算每個(gè)分組的開(kāi)盤價(jià)(first)、最高價(jià)(max)、最低價(jià)(min)和收盤價(jià)(last)。這個(gè)函數(shù)通常用于金融時(shí)間序列數(shù)據(jù)的分析。
-
prod():計(jì)算每個(gè)分組的乘積。這個(gè)函數(shù)可以用于計(jì)算某個(gè)時(shí)間段內(nèi)數(shù)據(jù)的累積效應(yīng)。
-
std():計(jì)算每個(gè)分組的標(biāo)準(zhǔn)差。這個(gè)函數(shù)用于衡量數(shù)據(jù)的離散程度或波動(dòng)性。
-
var():計(jì)算每個(gè)分組的方差。方差是標(biāo)準(zhǔn)差的平方,同樣用于衡量數(shù)據(jù)的離散程度。
-
median():計(jì)算每個(gè)分組的中位數(shù)。中位數(shù)是一種位置平均數(shù),對(duì)于偏態(tài)分布的數(shù)據(jù)具有較好的代表性。
-
quantile():計(jì)算每個(gè)分組的指定分位數(shù)。這個(gè)函數(shù)允許用戶指定一個(gè)介于0和1之間的數(shù)值作為分位數(shù),以獲取數(shù)據(jù)的不同分位點(diǎn)。
-
apply():應(yīng)用一個(gè)自定義的函數(shù)到每個(gè)分組。這個(gè)函數(shù)提供了極大的靈活性,允許用戶根據(jù)自己的需求編寫復(fù)雜的聚合邏輯。
四、plot快速可視化
?plot可視化需要安裝一個(gè)matplotlib包
使用包管理器安裝matplotlib
pip3 install matplotlib
案例:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#單樣本
df=np.random.rand(1000)
df=pd.DataFrame(df,index=pd.date_range('20210101',periods=1000))
print(df)
df.plot()
plt.show()
df是一個(gè)新的DataFrame,然后
設(shè)置一個(gè)新的索引,這個(gè)索引是一個(gè)日期范圍,從'20210101'開(kāi)始,包含1000個(gè)日期。plot
?方法實(shí)際上是Pandas對(duì)Matplotlib繪圖庫(kù)的封裝,為用戶提供了一個(gè)簡(jiǎn)潔的接口來(lái)快速生成圖表。plt.show是展示出來(lái)。
展示圖表:
?五、讀取與存儲(chǔ)(pandas)
讀取是pandas打點(diǎn)調(diào)用‘’read_格式‘’函數(shù),讀什么格式的文件就用什么格式。
案例:
讀取csv的文件:
pd.read_csv('txt.csv')
以下是一些Pandas可讀取的主要文件類型:
- CSV(Comma-Separated Values)文件:
- CSV是一種常見(jiàn)的文本文件格式,用于存儲(chǔ)表格數(shù)據(jù)。
- 每行表示一條記錄,字段之間用逗號(hào)分隔。
- Pandas使用
read_csv
函數(shù)讀取CSV文件。
- Excel文件:
- Excel是一種常見(jiàn)的電子表格文件格式,通常包含多個(gè)工作表。
- Pandas使用
read_excel
函數(shù)讀取Excel文件,并可以指定要讀取的工作表名稱或索引。
- JSON(JavaScript Object Notation)文件:
- JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,易于閱讀和編寫。
- Pandas使用
read_json
函數(shù)讀取JSON文件。
- SQL數(shù)據(jù)庫(kù):
- Pandas支持從SQL數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),需要使用SQLAlchemy庫(kù)來(lái)創(chuàng)建數(shù)據(jù)庫(kù)連接。
- 使用
read_sql
或read_sql_table
函數(shù)從SQL數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)。
- Parquet文件:
- Parquet是一種高效的列式存儲(chǔ)格式,適用于大規(guī)模數(shù)據(jù)集。
- Pandas使用
read_parquet
函數(shù)讀取Parquet文件。
- HDF5文件:
- HDF5是一種用于存儲(chǔ)大量數(shù)據(jù)的文件格式,支持分層數(shù)據(jù)存儲(chǔ)。
- Pandas使用
read_hdf
函數(shù)讀取HDF5文件,需要指定數(shù)據(jù)集的鍵(key)。
- Feather文件:
- Feather是一種輕量級(jí)的二進(jìn)制文件格式,適用于快速讀寫。
- Pandas使用
read_feather
函數(shù)讀取Feather文件。
- Pickle文件:
- Pickle是Python的一種序列化格式,用于存儲(chǔ)Python對(duì)象。
- Pandas使用
read_pickle
函數(shù)讀取Pickle文件。
- HTML文件:
- Pandas可以讀取HTML文件中的表格數(shù)據(jù)。
- 使用
read_html
函數(shù)讀取HTML文件,該函數(shù)返回一個(gè)DataFrame列表,其中每個(gè)DataFrame對(duì)應(yīng)HTML文件中的一個(gè)表格。
- TXT文件:
- 雖然Pandas沒(méi)有專門為TXT文件設(shè)計(jì)的讀取函數(shù),但可以使用
read_csv
函數(shù)通過(guò)指定適當(dāng)?shù)姆指舴麃?lái)讀取TXT文件。如果TXT文件的字段是用制表符(\t)分隔的,可以使用sep='\t'
參數(shù)。
- 雖然Pandas沒(méi)有專門為TXT文件設(shè)計(jì)的讀取函數(shù),但可以使用
案例2:
向Excel寫入:
data.to_excel('excel.xlsx',sheet_name='a')
上述代碼實(shí)現(xiàn)了創(chuàng)建sheet頁(yè):a,并向excel.xlsx文件輸入data數(shù)據(jù)。若想追加sheet頁(yè):
with pd.ExcelWriter('writerExcel.xlsx',mode='a',engine='openpyxl') as writer:data.to_excel(writer,sheet_name='d')
需要在打開(kāi)文件時(shí)設(shè)置屬性mode值為:a表示追加
engine
參數(shù)用于指定用于寫入Excel文件的底層引擎。Pandas支持多種引擎來(lái)處理Excel文件,但最常用的引擎是openpyxl
(用于.xlsx
文件)和xlsxwriter
。這兩個(gè)引擎都提供了豐富的功能來(lái)創(chuàng)建和修改Excel文件。
-
openpyxl
:這是一個(gè)用于讀寫Excel 2010 xlsx/xlsm/xltx/xltm文件的Python庫(kù)。它支持對(duì)Excel文件的讀取和寫入,包括公式、圖表、圖像等復(fù)雜元素。 -
xlsxwriter
:這是一個(gè)Python庫(kù),用于創(chuàng)建Excel?.xlsx
文件。它提供了豐富的功能來(lái)格式化單元格、添加圖表、創(chuàng)建工作表等。
同時(shí)添加多個(gè)sheet頁(yè):
with pd.ExcelWriter('writerExcel.xlsx') as writer:data.to_excel(writer,sheet_name='a')data.to_excel(writer, sheet_name='b')data.to_excel(writer, sheet_name='c')