日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python模块(6)-Pandas 简易使用教程

發布時間:2023/12/13 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 4

2.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.144602

3.字典創建

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.60

2.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: int64

3.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.60

3.1 獲取一列–列標簽

>>> df["A"] 2013-01-01 -0.512998 2013-01-02 0.851308 2013-01-03 0.154169 Freq: D, Name: A, dtype: float64

3.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.761327

3.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: float64

3.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.320288

3.5 index 獲取行列信息–df.iloc()

類似于numpy矩陣的索引操作
1.獲取一行

>>> df.iloc[0] A -0.512998 B 1.674901 C -0.447253 D 1.888928 Name: 2013-01-01 00:00:00, dtype: float64 >>> df.iloc[0,:] A -0.512998 B 1.674901 C -0.447253 D 1.888928 Name: 2013-01-01 00:00:00, dtype: float64

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.320288

3.行列切片

-0.512997918520904 >>> df.iloc[0:2,1:2]B 2013-01-01 1.674901 2013-01-02 0.090532

3.6 獲取一個元素

>>> df.loc["2013-01-01", 'A'] -0.512997918520904>>> df.at["2013-01-01", 'A'] -0.512997918520904>>> df.iloc[0,0] -0.512997918520904

3.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)

參數:

labels要刪除的行,列的標簽,用列表給定
axis默認為0,指刪除行;刪除columns時要指定axis=1
index直接指定要刪除的行索引
columns直接指定要刪除的列名稱
inplace=False,默認該刪除操作不改變原數據,而是返回一個執行刪除操作后的新
=True,則會直接在原數據上進行刪除操作,刪除后無法返回。

因此,刪除行列有兩種方式:

1)labels=None,axis=0 的組合
2)index或columns直接指定要刪除的行或列

df.drop(['B', 'C'], axis=1) # 刪除"B","C"列 df.drop([0, 1]) # 刪除0,1行 df.drop(columns=['B', 'C']) # 刪除"B","C"列 df.drop(index=[0, 1]) # 刪除0,1行

按列標號刪除列

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.859897

5.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) 參數
objsSeries,DataFrame或Panel對象的序列或映射
ignore_indexTrue: 拼接軸上的坐標從0-n-1排布
>>> df1 = pd.DataFrame(np.random.randn(3, 4)) >>> df2 = pd.DataFrame(np.random.randn(3, 4)) >>> df10 1 2 3 0 2.360959 -1.855941 -0.079708 0.533404 1 0.891633 -1.918339 -1.069706 1.069652 2 0.469251 0.198839 -1.661338 1.449165 >>> df20 1 2 3 0 0.697094 -0.003241 -1.077108 0.713898 1 -0.788362 0.616115 -0.123818 1.385414 2 -0.422057 -1.759653 1.094616 0.109523 >>> pd.concat([df1,df2]) # 原有的行標簽直接拼接0 1 2 3 0 2.360959 -1.855941 -0.079708 0.533404 1 0.891633 -1.918339 -1.069706 1.069652 2 0.469251 0.198839 -1.661338 1.449165 0 0.697094 -0.003241 -1.077108 0.713898 1 -0.788362 0.616115 -0.123818 1.385414 2 -0.422057 -1.759653 1.094616 0.109523 >>> pd.concat([df1,df2],ignore_index=True) # 忽略原有標簽,標簽直重新排列0 1 2 3 0 2.360959 -1.855941 -0.079708 0.533404 1 0.891633 -1.918339 -1.069706 1.069652 2 0.469251 0.198839 -1.661338 1.449165 3 0.697094 -0.003241 -1.077108 0.713898 4 -0.788362 0.616115 -0.123818 1.385414 5 -0.422057 -1.759653 1.094616 0.109523 >>> pd.concat([df1,df2]).index Int64Index([0, 1, 2, 0, 1, 2], dtype='int64') >>> pd.concat([df1,df2],ignore_index=True).index RangeIndex(start=0, stop=6, step=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: float64

2.求行均值

>>> df.mean(1) 2013-01-01 0.650894 2013-01-02 0.213674 2013-01-03 -0.017713 Freq: D, dtype: float64

6.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.071804

6.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.498190

6.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.888928

6.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.320288

df.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.524988

6.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’,)

sep=’?’數據保存時分隔符,默認為逗號
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) 必要參數
ioExcel的存儲路徑
sheet_name定位要讀取的子表,整型數字(表格序號,從0開始)、列表名或SheetN
data_path = "./data2.xlsx" excel = pd.read_excel(path, sheet_name = 0)

參考博文: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 简易使用教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。