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