python模块(6)-Pandas 简易使用教程
Pandas 簡易教程
- 1.Pandas簡介
- 2.創建
- 2.1創建dataFrame
- 2.2創建Series
- 3.dataframe數據訪問
- 3.1 獲取一列--列標簽
- 3.2 獲取多列--列標簽列表
- 3.3 獲取一行--行標簽.loc()
- 3.4 獲取多行--行切片操作.loc()
- 3.5 index 獲取行列信息--df.iloc()
- 3.6 獲取一個元素
- 3.7 布爾值選擇數據
- 4.dataframe刪除操作
- 4.1 DataFrame.drop()
- 4.2 刪除一列--del,pop
- 5.dataframe 合并追加操作
- 5.1 追加一行
- 5.2 追加一列
- 5.3 合并操作-- pd.concat()
- 6.dataframe統計操作
- 6.1求均值
- 6.2 df.describe()
- 6.4 df.T
- 6.4 df排序
- 6.4.1 按行/列名稱排序--df.sort_index()
- 6.4.2 按某一行/列值排序
- 6.5 查看df數據的頭部/尾部
- 6.6 df 與numpy.array 相互轉換
- 6.7 分位點
- 7.文件讀寫
- 7.1 pd.read_csv() 讀CSV文件
- 7.2 pd.to_csv() 寫csv文件
- 7.3 df.read_excel() 讀 excel 文件
- 7.4 df.to_excel()
- 8.統計繪圖(待)
- 8.1 DataFrame.hist()
- 9.常用方法清單
1.Pandas簡介
是什么
Pandas 是 Python 的核心數據分析支持庫,提供了快速、靈活、明確的數據結構,旨在簡單、直觀地處理關系型、標記型數據。
Pandas 的主要數據結構: Series(一維數據) 與 DataFrame(二維數據),這兩種數據結構足以處理金融、統計、社會科學、工程等領域里的大多數典型用例。
Pandas 的優勢
1.處理浮點與非浮點數據里的缺失數據,表示為NaN;
2.成熟的 IO 工具:讀取文本文件(CSV 等支持分隔符的文件)、Excel 文件;
3.把 Python 和 NumPy 數據結構里不規則、不同索引的數據輕松地轉換為 DataFrame 對象;
Pandas 可用于,數據處理 整個流程中:
數據整理與清洗->數據分析與建模->數據可視化與制表
Pandas 里,絕大多數方法都不改變原始的輸入數據,而是復制數據,生成新的對象。 一般來說,原始輸入數據不變更穩妥。(內存管理問題)
2.創建
2.1創建dataFrame
1.不指定數據創建,然后填入數據
>>> dfa=pd.DataFrame() >>> dfa["A"]=np.array([1,2,3,4]) >>> dfaA 0 1 1 2 2 3 3 42.numpy數組創建
>>> 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.字典創建
data = {"id" : ["Jack", "Sarah", "Mike"],"age" : [18, 35, 20],"cash" : [10.53, 500.7, 13.6]} df = pd.DataFrame(data) # 默認列名 print(df) df2 = pd.DataFrame(data, index=["one", "two", "three"]) # 設定列名 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創建Series
系列其實構成了dataframe中的一列,默認的情況下,系列的索引是非負整數列
s = pd.Series({"a" : 4, "b": 9, "c" : 16}, name="number") print(s)輸出
a 4 b 9 c 16 Name: number, dtype: int643.dataframe數據訪問
系列類似于數組,可以使用下標索引,支持向量化操作。由很多的系列構成dataFrame,所以對dataFrame的操作也與系列中類似。
# 系列的訪問 print(s[0], s[:3]) # 下標,切片 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]) 的結果 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 獲取一列–列標簽
>>> df["A"] 2013-01-01 -0.512998 2013-01-02 0.851308 2013-01-03 0.154169 Freq: D, Name: A, dtype: float643.2 獲取多列–列標簽列表
(列標簽需要放在List中,否著無法訪問)
>>> 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 獲取一行–行標簽.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()
類似于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 獲取一個元素
>>> df.loc["2013-01-01", 'A'] -0.512997918520904>>> df.at["2013-01-01", 'A'] -0.512997918520904>>> df.iloc[0,0] -0.5129979185209043.7 布爾值選擇數據
>>> 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) 重新設置行標號
4.dataframe刪除操作
4.1 DataFrame.drop()
DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)
參數:
| axis | 默認為0,指刪除行;刪除columns時要指定axis=1 |
| index | 直接指定要刪除的行索引 |
| columns | 直接指定要刪除的列名稱 |
| inplace | =False,默認該刪除操作不改變原數據,而是返回一個執行刪除操作后的新 |
| =True,則會直接在原數據上進行刪除操作,刪除后無法返回。 |
因此,刪除行列有兩種方式:
1)labels=None,axis=0 的組合
2)index或columns直接指定要刪除的行或列
按列標號刪除列
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[“列名”]=一列數據: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對象的序列或映射 |
| ignore_index | True: 拼接軸上的坐標從0-n-1排布 |
參考資料:https://blog.csdn.net/zzpdbk/article/details/79232661
6.dataframe統計操作
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()
查看數據統計摘要
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
轉置操作
>>> 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 按行/列名稱排序–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’) 報錯
6.5 查看df數據的頭部/尾部
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 相互轉換
DataFrame.to_numpy() 轉化成NumPy 數據類型,輸出不包含行索引和列標簽。當dataframe各列的數據類型不同時,該操作耗費系統資源較大。
>>> 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 分位點
df.quantile(a)
a就是分位點參數[0,1]
7.文件讀寫
7.1 pd.read_csv() 讀CSV文件
0.讀入csv 文件,返回一個df數據
pd.read_csv(filepath , header , parse_dates , index_col)
1.給數據加上一個從0開始的列索引
df=pd.read_csv(“test.csv”,header=None)
2.給的數據加上一個從m開始n-1結束的索引
df=pd.read_csv(“test.csv”,header=None,names=range(m,n))
3.指定數據的第一行為列索引
df=pd.read_csv(“test.csv”,header=0)
4.指定每個列的名稱
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() 寫csv文件
pd.to_csv(“test.csv”,sep=’?’,header=0,index=0,float_format=’%.2f’,)
| header=0 | 不保留列名 |
| index=0 | 不保留行名 |
| float_format=’%.2f’ | 浮點數保留兩位小數 |
| columns=[‘name’] | 保留特定的列 |
| mode=“a” | 追加一行數據 |
df.to_csv(“test.csv”,mode=“a”,header=False,index=False)
#df 為一行新數據
參考博文: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的存儲路徑 |
| sheet_name | 定位要讀取的子表,整型數字(表格序號,從0開始)、列表名或SheetN |
參考博文:https://blog.csdn.net/weixin_38546295/article/details/83537558
7.4 df.to_excel()
to_excel()會直接覆蓋原來所有的數據表
df = ..... df.to_excel(file_name, sheet_name="xxx")借助ExcelWriter間接保留原有數據表
#----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") # 新建處理后數據表 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.統計繪圖(待)
8.1 DataFrame.hist()
使用DataFrame.hist()方法創建直方圖, 該方法是matplotlib pyplot API的包裝器。
DataFrame.hist()函數參數接口:
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()函數返回:
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.列標會顯示在直方圖上
2.bins:決定了直方的條數,默認為10條
3. 繪圖之后,還需要plt.show(),或者保存
4. DataFrame.hist()返回axes 那么就可以設置子圖屬性啥的?
9.常用方法清單
| pd.get_dummies() | 將類別變量轉換成one-hot 編碼 |
| Series.isnull() | 判斷系列中是否含有空值 |
| Series.is_unique() | 判斷系列中是否存在重復值 |
| Series.value_counts() | 統計系列中所有取值出現的次數 |
| DataFrame.mean() | 計算行列均值 |
| DataFrame.dropna() | 刪除數據缺失的行或者列 |
| DataFrame.drop_duplicates() | 刪除所有重復的行或者列 |
| DataFrame.head() | 返回數據的前5行,查看數據格式 |
| DataFrame.tail() | 返回數據框的后5行,查看數據格式 |
| df.corr() | 計算各列的相關系數,參數可選項pearson,kendall,spearman |
df.corr()參考博文:https://blog.csdn.net/walking_visitor/article/details/85128461
全文參考博文:https://www.pypandas.cn/docs/
總結
以上是生活随笔為你收集整理的python模块(6)-Pandas 简易使用教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学点数学(3)-函数空间
- 下一篇: 《Python Cookbook 3rd