python模块(6)-Pandas 简易使用教程
Pandas 簡(jiǎn)易教程
- 1.Pandas簡(jiǎn)介
- 2.創(chuàng)建
- 2.1創(chuàng)建dataFrame
- 2.2創(chuàng)建Series
- 3.dataframe數(shù)據(jù)訪問(wèn)
- 3.1 獲取一列--列標(biāo)簽
- 3.2 獲取多列--列標(biāo)簽列表
- 3.3 獲取一行--行標(biāo)簽.loc()
- 3.4 獲取多行--行切片操作.loc()
- 3.5 index 獲取行列信息--df.iloc()
- 3.6 獲取一個(gè)元素
- 3.7 布爾值選擇數(shù)據(jù)
- 4.dataframe刪除操作
- 4.1 DataFrame.drop()
- 4.2 刪除一列--del,pop
- 5.dataframe 合并追加操作
- 5.1 追加一行
- 5.2 追加一列
- 5.3 合并操作-- pd.concat()
- 6.dataframe統(tǒng)計(jì)操作
- 6.1求均值
- 6.2 df.describe()
- 6.4 df.T
- 6.4 df排序
- 6.4.1 按行/列名稱(chēng)排序--df.sort_index()
- 6.4.2 按某一行/列值排序
- 6.5 查看df數(shù)據(jù)的頭部/尾部
- 6.6 df 與numpy.array 相互轉(zhuǎn)換
- 6.7 分位點(diǎn)
- 7.文件讀寫(xiě)
- 7.1 pd.read_csv() 讀CSV文件
- 7.2 pd.to_csv() 寫(xiě)csv文件
- 7.3 df.read_excel() 讀 excel 文件
- 7.4 df.to_excel()
- 8.統(tǒng)計(jì)繪圖(待)
- 8.1 DataFrame.hist()
- 9.常用方法清單
1.Pandas簡(jiǎn)介
是什么
Pandas 是 Python 的核心數(shù)據(jù)分析支持庫(kù),提供了快速、靈活、明確的數(shù)據(jù)結(jié)構(gòu),旨在簡(jiǎn)單、直觀地處理關(guān)系型、標(biāo)記型數(shù)據(jù)。
Pandas 的主要數(shù)據(jù)結(jié)構(gòu): Series(一維數(shù)據(jù)) 與 DataFrame(二維數(shù)據(jù)),這兩種數(shù)據(jù)結(jié)構(gòu)足以處理金融、統(tǒng)計(jì)、社會(huì)科學(xué)、工程等領(lǐng)域里的大多數(shù)典型用例。
Pandas 的優(yōu)勢(shì)
1.處理浮點(diǎn)與非浮點(diǎn)數(shù)據(jù)里的缺失數(shù)據(jù),表示為NaN;
2.成熟的 IO 工具:讀取文本文件(CSV 等支持分隔符的文件)、Excel 文件;
3.把 Python 和 NumPy 數(shù)據(jù)結(jié)構(gòu)里不規(guī)則、不同索引的數(shù)據(jù)輕松地轉(zhuǎn)換為 DataFrame 對(duì)象;
Pandas 可用于,數(shù)據(jù)處理 整個(gè)流程中:
數(shù)據(jù)整理與清洗->數(shù)據(jù)分析與建模->數(shù)據(jù)可視化與制表
Pandas 里,絕大多數(shù)方法都不改變?cè)嫉妮斎霐?shù)據(jù),而是復(fù)制數(shù)據(jù),生成新的對(duì)象。 一般來(lái)說(shuō),原始輸入數(shù)據(jù)不變更穩(wěn)妥。(內(nèi)存管理問(wèn)題)
2.創(chuàng)建
2.1創(chuàng)建dataFrame
1.不指定數(shù)據(jù)創(chuàng)建,然后填入數(shù)據(jù)
>>> dfa=pd.DataFrame() >>> dfa["A"]=np.array([1,2,3,4]) >>> dfaA 0 1 1 2 2 3 3 42.numpy數(shù)組創(chuàng)建
>>> dfb= pd.DataFrame(np.random.randn(3, 4), index=["day1","day2","day3"], columns=list('ABCD')) >>> dfbA B C D day1 0.292165 -0.514650 -1.013541 0.206613 day2 1.255805 -0.504385 -0.121249 -0.041156 day3 0.083240 -0.887587 0.792058 -0.1446023.字典創(chuàng)建
data = {"id" : ["Jack", "Sarah", "Mike"],"age" : [18, 35, 20],"cash" : [10.53, 500.7, 13.6]} df = pd.DataFrame(data) # 默認(rèn)列名 print(df) df2 = pd.DataFrame(data, index=["one", "two", "three"]) # 設(shè)定列名 print(df2)輸出:
id age cash 0 Jack 18 10.53 1 Sarah 35 500.70 2 Mike 20 13.60id age cash one Jack 18 10.53 two Sarah 35 500.70 three Mike 20 13.602.2創(chuàng)建Series
系列其實(shí)構(gòu)成了dataframe中的一列,默認(rèn)的情況下,系列的索引是非負(fù)整數(shù)列
s = pd.Series({"a" : 4, "b": 9, "c" : 16}, name="number") print(s)輸出
a 4 b 9 c 16 Name: number, dtype: int643.dataframe數(shù)據(jù)訪問(wèn)
系列類(lèi)似于數(shù)組,可以使用下標(biāo)索引,支持向量化操作。由很多的系列構(gòu)成dataFrame,所以對(duì)dataFrame的操作也與系列中類(lèi)似。
# 系列的訪問(wèn) print(s[0], s[:3]) # 下標(biāo),切片 print(s["a"]) # 索引 print(np.sqrt(s))# dataFrame 的增刪查改 print(df["id"]) # 查 df["rich"] = df["cash"] > 200.0 # 增 print(df) del(df["rich"]) # 刪除 print(df)輸出:
---------- 4 a 4 #print(s[0], s[:3]) 的結(jié)果 b 9 c 16 Name: number, dtype: int64 4 a 2.0 b 3.0 c 4.0 Name: number, dtype: float64 0 Jack 1 Sarah 2 Mike Name: id, dtype: objectid age cash rich 0 Jack 18 10.53 False 1 Sarah 35 500.70 True 2 Mike 20 13.60 Falseid age cash 0 Jack 18 10.53 1 Sarah 35 500.70 2 Mike 20 13.603.1 獲取一列–列標(biāo)簽
>>> df["A"] 2013-01-01 -0.512998 2013-01-02 0.851308 2013-01-03 0.154169 Freq: D, Name: A, dtype: float643.2 獲取多列–列標(biāo)簽列表
(列標(biāo)簽需要放在List中,否著無(wú)法訪問(wèn))
>>> df[["A","B"]]A B 2013-01-01 -0.512998 1.674901 2013-01-02 0.851308 0.090532 2013-01-03 0.154169 0.7613273.3 獲取一行–行標(biāo)簽.loc()
>>> df.loc["2013-01-01"] A -0.512998 B 1.674901 C -0.447253 D 1.888928 Name: 2013-01-01 00:00:00, dtype: float643.4 獲取多行–行切片操作.loc()
不能用df.loc[[“2013-01-01”,“2013-01-02”]])
>>> df[0:2]A B C D 2013-01-01 -0.512998 1.674901 -0.447253 1.888928 2013-01-02 0.851308 0.090532 -0.407433 0.3202883.5 index 獲取行列信息–df.iloc()
類(lèi)似于numpy矩陣的索引操作
1.獲取一行
2.獲取多行–行索引切片
>>> df.iloc[0:2]A B C D 2013-01-01 -0.512998 1.674901 -0.447253 1.888928 2013-01-02 0.851308 0.090532 -0.407433 0.3202883.行列切片
-0.512997918520904 >>> df.iloc[0:2,1:2]B 2013-01-01 1.674901 2013-01-02 0.0905323.6 獲取一個(gè)元素
>>> df.loc["2013-01-01", 'A'] -0.512997918520904>>> df.at["2013-01-01", 'A'] -0.512997918520904>>> df.iloc[0,0] -0.5129979185209043.7 布爾值選擇數(shù)據(jù)
>>> df[df.A > 0]A B C D 2013-01-02 0.851308 0.090532 -0.407433 0.320288 2013-01-03 0.154169 0.761327 -0.488159 -0.498190利用.reset_index(drop=True) 重新設(shè)置行標(biāo)號(hào)
4.dataframe刪除操作
4.1 DataFrame.drop()
DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)
參數(shù):
| axis | 默認(rèn)為0,指刪除行;刪除columns時(shí)要指定axis=1 |
| index | 直接指定要?jiǎng)h除的行索引 |
| columns | 直接指定要?jiǎng)h除的列名稱(chēng) |
| inplace | =False,默認(rèn)該刪除操作不改變?cè)瓟?shù)據(jù),而是返回一個(gè)執(zhí)行刪除操作后的新 |
| =True,則會(huì)直接在原數(shù)據(jù)上進(jìn)行刪除操作,刪除后無(wú)法返回。 |
因此,刪除行列有兩種方式:
1)labels=None,axis=0 的組合
2)index或columns直接指定要?jiǎng)h除的行或列
按列標(biāo)號(hào)刪除列
DF.drop([DF.columns[[0,1, 3]]], axis=1,inplace=True) # Note: zero indexed
4.2 刪除一列–del,pop
>>> del df["A"] # 刪除列A >>> dfB C D 2013-01-01 1.674901 -0.447253 1.888928 2013-01-02 0.090532 -0.407433 0.320288 2013-01-03 0.761327 -0.488159 -0.498190 >>> B=df.pop("B") # 將第B列彈出,起到輸出某一列的作用 >>> dfC D 2013-01-01 -0.447253 1.888928 2013-01-02 -0.407433 0.320288 2013-01-03 -0.488159 -0.498190 >>> B 2013-01-01 1.674901 2013-01-02 0.090532 2013-01-03 0.761327 Freq: D, Name: B, dtype: float64 >>>5.dataframe 合并追加操作
5.1 追加一行
>>> df1 = pd.DataFrame(np.random.randn(2, 4), columns=['A', 'B', 'C', 'D']) >>> df1A B C D 0 -0.559292 0.198070 -0.114022 -1.622667 1 0.794817 0.682684 1.476562 0.163302 >>> row=pd.DataFrame(np.random.randn(1, 4), columns=['A', 'B', 'C', 'D']) >>> df1.append(row,ignore_index=True)A B C D 0 -0.559292 0.198070 -0.114022 -1.622667 1 0.794817 0.682684 1.476562 0.163302 2 -1.181575 -0.272601 -1.752255 -0.8598975.2 追加一列
直接df[“列名”]=一列數(shù)據(jù):df, numpy.array
5.3 合并操作-- pd.concat()
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None, levels=None, names=None, verify_integrity=False,copy=True)| objs | Series,DataFrame或Panel對(duì)象的序列或映射 |
| ignore_index | True: 拼接軸上的坐標(biāo)從0-n-1排布 |
參考資料:https://blog.csdn.net/zzpdbk/article/details/79232661
6.dataframe統(tǒng)計(jì)操作
6.1求均值
1.求列均值
>>> df.mean() A 0.164160 B 0.842253 C -0.447615 D 0.570342 dtype: float642.求行均值
>>> df.mean(1) 2013-01-01 0.650894 2013-01-02 0.213674 2013-01-03 -0.017713 Freq: D, dtype: float646.2 df.describe()
查看數(shù)據(jù)統(tǒng)計(jì)摘要
df.describe()A B C D count 6.000000 6.000000 6.000000 6.000000 mean 0.073711 -0.431125 -0.687758 -0.233103 std 0.843157 0.922818 0.779887 0.973118 min -0.861849 -2.104569 -1.509059 -1.135632 25% -0.611510 -0.600794 -1.368714 -1.076610 50% 0.022070 -0.228039 -0.767252 -0.386188 75% 0.658444 0.041933 -0.034326 0.461706 max 1.212112 0.567020 0.276232 1.0718046.4 df.T
轉(zhuǎn)置操作
>>> dfC D 2013-01-01 -0.447253 1.888928 2013-01-02 -0.407433 0.320288 2013-01-03 -0.488159 -0.498190 >>> df.T2013-01-01 2013-01-02 2013-01-03 C -0.447253 -0.407433 -0.488159 D 1.888928 0.320288 -0.4981906.4 df排序
6.4.1 按行/列名稱(chēng)排序–df.sort_index()
>>> dfC D 2013-01-01 -0.447253 1.888928 2013-01-02 -0.407433 0.320288 2013-01-03 -0.488159 -0.498190 >>> df.sort_index(axis=1, ascending=False)D C 2013-01-01 1.888928 -0.447253 2013-01-02 0.320288 -0.407433 2013-01-03 -0.498190 -0.488159 >>> df.sort_index(axis=0, ascending=False)C D 2013-01-03 -0.488159 -0.498190 2013-01-02 -0.407433 0.320288 2013-01-01 -0.447253 1.8889286.4.2 按某一行/列值排序
按值排序(指定按某一列的值)
>>> df.sort_values(by='C')C D 2013-01-03 -0.488159 -0.498190 2013-01-01 -0.447253 1.888928 2013-01-02 -0.407433 0.320288df.sort_values(by=‘2013-01-03’) 報(bào)錯(cuò)
6.5 查看df數(shù)據(jù)的頭部/尾部
df.head()A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401df.tail(3)A B C D 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.5249886.6 df 與numpy.array 相互轉(zhuǎn)換
DataFrame.to_numpy() 轉(zhuǎn)化成NumPy 數(shù)據(jù)類(lèi)型,輸出不包含行索引和列標(biāo)簽。當(dāng)dataframe各列的數(shù)據(jù)類(lèi)型不同時(shí),該操作耗費(fèi)系統(tǒng)資源較大。
>>> dfC D 2013-01-01 -0.447253 1.888928 2013-01-02 -0.407433 0.320288 2013-01-03 -0.488159 -0.498190 >>> df.to_numpy() array([[-0.44725345, 1.88892814],[-0.40743299, 0.32028762],[-0.4881592 , -0.49818956]])6.7 分位點(diǎn)
df.quantile(a)
a就是分位點(diǎn)參數(shù)[0,1]
7.文件讀寫(xiě)
7.1 pd.read_csv() 讀CSV文件
0.讀入csv 文件,返回一個(gè)df數(shù)據(jù)
pd.read_csv(filepath , header , parse_dates , index_col)
1.給數(shù)據(jù)加上一個(gè)從0開(kāi)始的列索引
df=pd.read_csv(“test.csv”,header=None)
2.給的數(shù)據(jù)加上一個(gè)從m開(kāi)始n-1結(jié)束的索引
df=pd.read_csv(“test.csv”,header=None,names=range(m,n))
3.指定數(shù)據(jù)的第一行為列索引
df=pd.read_csv(“test.csv”,header=0)
4.指定每個(gè)列的名稱(chēng)
col_label =[“A”, “B”, “C”]
df = pd.read_csv(“test.csv”, names = col_label)
參考博文:https://www.jianshu.com/p/ebb64a159104
7.2 pd.to_csv() 寫(xiě)csv文件
pd.to_csv(“test.csv”,sep=’?’,header=0,index=0,float_format=’%.2f’,)
| header=0 | 不保留列名 |
| index=0 | 不保留行名 |
| float_format=’%.2f’ | 浮點(diǎn)數(shù)保留兩位小數(shù) |
| columns=[‘name’] | 保留特定的列 |
| mode=“a” | 追加一行數(shù)據(jù) |
df.to_csv(“test.csv”,mode=“a”,header=False,index=False)
#df 為一行新數(shù)據(jù)
參考博文:https://blog.csdn.net/toshibahuai/article/details/79034829
7.3 df.read_excel() 讀 excel 文件
df.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False,dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds)| io | Excel的存儲(chǔ)路徑 |
| sheet_name | 定位要讀取的子表,整型數(shù)字(表格序號(hào),從0開(kāi)始)、列表名或SheetN |
參考博文:https://blog.csdn.net/weixin_38546295/article/details/83537558
7.4 df.to_excel()
to_excel()會(huì)直接覆蓋原來(lái)所有的數(shù)據(jù)表
df = ..... df.to_excel(file_name, sheet_name="xxx")借助ExcelWriter間接保留原有數(shù)據(jù)表
#----encoding: utf8------ import pandas as pd excel_file = "123.xlsx" writer = pd.ExcelWriter(excel_file) df_sheet1 = pd.read_excel(excel_file, sheet_name="Sheet1") # 保持原有的sheet不變 df_sheet1.to_excel(writer, sheet_name="Sheet1") # 新建處理后數(shù)據(jù)表 post_process_list = ["sheet2", "sheet3"] for sheet_name_str in post_process_list:df_sheet = pd.read_excel(excel_file, sheet_name=sheet_name_str)# do some process....df_sheet.sort_values("delta_s", inplace=True)df_sheet.to_excel(writer, sheet_name=sheet_name_str ) writer.save()8.統(tǒng)計(jì)繪圖(待)
8.1 DataFrame.hist()
使用DataFrame.hist()方法創(chuàng)建直方圖, 該方法是matplotlib pyplot API的包裝器。
DataFrame.hist()函數(shù)參數(shù)接口:
DataFrame.hist(data, column=None, by=None, grid=True, xlabelsize=None, xrot=None, ylabelsize=None, yrot=None, ax=None, sharex=False, sharey=False, figsize=None, layout=None, bins=10, **kwds)
DataFrame.hist()函數(shù)返回:
matplotlib.AxesSubplot或numpy.ndarray。
DataFrame.hist()用例:
import pandas as pd
info = pd.DataFrame({
‘length’: [2, 1.7, 3.6, 2.4, 1], ‘width’: [4.2, 2.6, 1.6, 5.1, 2.9]
})
hist = info.hist(bins=4)
提示:
1.列標(biāo)會(huì)顯示在直方圖上
2.bins:決定了直方的條數(shù),默認(rèn)為10條
3. 繪圖之后,還需要plt.show(),或者保存
4. DataFrame.hist()返回axes 那么就可以設(shè)置子圖屬性啥的?
9.常用方法清單
| pd.get_dummies() | 將類(lèi)別變量轉(zhuǎn)換成one-hot 編碼 |
| Series.isnull() | 判斷系列中是否含有空值 |
| Series.is_unique() | 判斷系列中是否存在重復(fù)值 |
| Series.value_counts() | 統(tǒng)計(jì)系列中所有取值出現(xiàn)的次數(shù) |
| DataFrame.mean() | 計(jì)算行列均值 |
| DataFrame.dropna() | 刪除數(shù)據(jù)缺失的行或者列 |
| DataFrame.drop_duplicates() | 刪除所有重復(fù)的行或者列 |
| DataFrame.head() | 返回?cái)?shù)據(jù)的前5行,查看數(shù)據(jù)格式 |
| DataFrame.tail() | 返回?cái)?shù)據(jù)框的后5行,查看數(shù)據(jù)格式 |
| df.corr() | 計(jì)算各列的相關(guān)系數(shù),參數(shù)可選項(xiàng)pearson,kendall,spearman |
df.corr()參考博文:https://blog.csdn.net/walking_visitor/article/details/85128461
全文參考博文:https://www.pypandas.cn/docs/
總結(jié)
以上是生活随笔為你收集整理的python模块(6)-Pandas 简易使用教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 学点数学(3)-函数空间
- 下一篇: 《Python Cookbook 3rd