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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2023/12/13 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python模块(6)-Pandas 简易使用教程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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 4

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

3.字典創(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.60

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

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

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

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

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

類(lèi)似于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 獲取一個(gè)元素

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

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

labels要?jiǎng)h除的行,列的標(biāo)簽,用列表給定
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除的行或列

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行

按列標(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.859897

5.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) 參數(shù)
objsSeries,DataFrame或Panel對(duì)象的序列或映射
ignore_indexTrue: 拼接軸上的坐標(biāo)從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]) # 原有的行標(biāo)簽直接拼接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) # 忽略原有標(biāo)簽,標(biāo)簽直重新排列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統(tǒng)計(jì)操作

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()

查看數(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.071804

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

6.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.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’) 報(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.524988

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

sep=’?’數(shù)據(jù)保存時(shí)分隔符,默認(rèn)為逗號(hào)
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) 必要參數(shù)
ioExcel的存儲(chǔ)路徑
sheet_name定位要讀取的子表,整型數(shù)字(表格序號(hào),從0開(kāi)始)、列表名或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()會(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。