像用excel一樣用pandas

2022-06-29 18:21:14 字數 3780 閱讀 8669

預計需要15min閱讀此教材;

本教材僅講述如何檢視excel資料,篩選,排序,查詢替換資料,不涉及excel中複雜的圖形繪製及樣式修改。

假設,已經存在乙個test.xlsx檔案,僅包含乙個sheet,檔案內容如下。

col1

col2

foo1

bar1

foo2

bar2

讀取乙個excel並賦值給df

import pandas as pd

df = pd.read_excel('foo.xlsx')

檢視行列數
#法一

df.shape

# (2,2)

# m,n其中m為行數,n為列數

# 法二

df.info()

# # rangeindex: 2 entries, 0 to 1

# data columns (total 2 columns):

# col1 fa 2 non-null object

# col2 fa 2 non-null object

# dtypes: object(2)

# memory usage: 112.0+ bytes

檢視列名
df.columns

# index(['col1', 'col2'], dtype='object')

說明:如果沒有定義表頭columns展示僅是索引名1,2,3

獲取單元格值

如果了解單元格的行列值可以使用iloc方法獲取單元格值。

df.iloc[m, n]
其中m為行數,n為列數,二者均從0開始索引。

檢視行可以使用標籤,切片,標籤矩陣等等獲取行數。

# 檢視單行

df.iloc[1] or df.loc['index']

# 檢視多行

df.iloc[[1,2,3,4,8,9]]

# 檢視前7行

df.iloc[:7]

# 或者

df.loc[:7]

python中切片是不算終止乙個元素的,df.iloc取前n個元素是使用':n',而loc方法是計算終止元素的,取前n元素方法就變為df.loc[:n-1]

檢視列
# 檢視單列

df['col1']或者df.col1,,其中col1為列名。推薦使用df.col1

# 檢視多列,過濾時傳入乙個列陣列

df[['col1','col2']]

# 檢視前7列,由於不清楚前7列名,使用選擇較為困難,pandas提供iloc方法,支援切片選擇。

# :意味著選擇所有行,0:7意味著選擇從1行到第7行

df.iloc[[: , 0:7]]

如果excel**有列名且沒有空格,pandas會預設為df增加乙個同列名的字段

全表檢視

pandas沒有全表檢視api,如果要全表檢視需要自行編寫**:

# 由於dataframe是採用列式儲存,這裡第一層迴圈使用列,第二層迴圈使用行。

for i in df.columns:

for j in df.index:

if df.loc[j, i] == 'bar2':

print('column name:',i,',row idx:',j)

插入新列

插入新列僅需新增乙個新的值,並賦值乙個series物件即可。

df['newcolumn']= pd.series([1,2])
插入新行

方法一:使用loc。

# 注意在插入時列必須匹配,不能有預設列。

chipo.loc[chipo.shape[0]]=

newdf = pd.dataframe()  

# 插入一條記錄

修改單元格的值

如果你知道修改單元格的行和列可以使用iloc方法:

# 行和列從0開始索引

df.iloc[m, n] = targetv

dataframe提供drop方法支援批量刪除行和列。

drop(labels, axis=0, level=none, inplace=false, errors='raise')

# --axis為0時表示刪除行,axis為1時表示刪除列

引數解釋,

# 刪除第一和第三行

df.drop(label=[1,3])

# 刪除名為item的列

df.drop(label=['item'], axis=1)

# 等價

df.drop(label='item', axis=1)

pandas僅支援按標籤刪除行列,不支援按行列值刪除,這點與選擇不同

新增過濾條件,

df[df.col1=='chicken bowl']
如果在乙個列中要選擇多個值,series物件有isin方法可以實現該功能

df[df.col1.isin('chicken bowl','huawei')]
多條件過濾

如果需要新增多個過濾條件可以使用,

df[(df.col1=='chicken bowl') & (df.col2==30)]
該方法返回值型別為dataframe。

dataframe和series都有sort_values方法,可按照某列資料做排序。排序方法返回的值依然為dataframe。

df.sort_values(['column'])

//sort_values支援傳入陣列,所以可以指定多個排序字段

# or 使用series方法

df.col1.sort_values()

設定排序順序

//按降序排序

df.sort_values(['col1','col2'],ascending=false)

按列值排序

df.sort_index(axis=1, ascending=false)
單列排序會影響所有記錄重新排序,而不是影響單獨列。

至此,你已學會如何讀取檔案,檢視資料並操作excel值,現在需要將結果寫回excel。dataframe提供to系列方法實現寫回。

df.to_excel('test.xlsx', sheet_name='sheet1')
注意讀取時使用pandas靜態方法,寫回則使用dataframe的方法

dataframe

series

像Excel一樣使用Python(一)

在進行資料處理時,如果資料簡單,數量不多,excel是大家的首選。但是當資料眾多,型別複雜,需要靈活地顯示切片 進行索引 以及排序時,python會更加方便。借助python中的numpy和pandas庫,它能快速完成各種任務,包括資料的建立 檢查 清洗 預處理 提取 篩選 彙總 統計等。接下來幾篇...

Pandas教程 像寫SQL一樣用Pandas

pandas教程 像寫sql一樣用pandas 對於right index true的解釋稍微清楚一些吧 pandas 合併concat和merge pandas contact 之後,一定要記得用reset index去處理index,不然容易出現莫名的邏輯錯誤 concat 預設axis 0,即...

像Excel一樣使用Python(二)

像excel一樣使用python,上一期介紹了生成 檢視 替換等功能,這一期介紹資料預處理,包括資料表合併 排序 分組等。excel裡智慧型複製貼上來合併 或者通過vlookup函式分步實現。python中,可以直接使用merge函式來合併兩個表,可選引數較多,這裡只介紹最常用的幾個引數 df1.m...