目錄
- 1.問題
- 2.方案
- 2.1.安裝
- 2.2.讀寫文件
- 2.3.數據操作
- 2.4.數據篩選
- 2.5.數據寫入
- 2.6.數據刪除
- 3.討論
- 總結
1.問題
在python中,讀寫excel數據方法很多,比如xlrd、xlwt和openpyxl,實際上限制比較多,不是很方便。比如openpyxl也不支持csv格式。有沒有更好的方法?
2.方案
更好的方法可以使用pandas,雖然pandas不是專門處理excel數據,但處理excel數據確實很方便。
本文使用excel的數據來自網絡,數據內容如下:

2.1.安裝
使用pip進行安裝。
導入pandas:
下文使用pd進行pandas的操作。
2.2.讀寫文件
讀取文件,比如excel,csv文件
# df是pandas.core.frame.DataFrame類型
df = pd.read_excel('./data/2020-suv.xlsx')
# read_csv可以指定分割符,編碼方式等
df2 = pd.read_csv('./data/2020-suv.csv')
寫入文件:
df.to_excel('./data/2020-suv-new.xlsx')
df.to_csv('./data/2020-suv-new.csv')
2.3.數據操作
all_cols = df.columns
print(all_cols)
# 輸出,df.columns并非list類型
Index(['銷量排名', '車系', '官方價', '從屬品牌', '1-12月銷量'], dtype='object')
# df.columns并非list類型,可以轉化list
cols = list(df.columns)
獲取列數據
col_data = df[u'車系']
mul_col_data = df[ [u'車系', u'1-12月銷量'] ]
獲取行數據
row_data = df.iloc[row_index]
獲取所有行數據
切片獲取多行數據
mul_row_data = df.iloc[2:4]
獲取單元個數據
cell_data = df.iloc[row_index][col_index]
2.4.數據篩選
Excel數據篩選比較實用,用pandas同樣可以,并且篩選代碼保存后,下次可以直接使用。
某個字段包含指定值
# 包含一個值,na表示是否需要填充,case表示是否區分大小寫,更強大的是contains還支持正則表達式
sub_df = df[ df[col_name].str.contains('key1', na=False, case=False) ]
# 包含多個值,多次調用即可
sub_df1 = df[ df[col_name].str.contains('key1', na=False, case=False) ]
sub_df2 = sub_df1[ sub_df1[col_name].str.contains('key2', na=False, case=False) ]
# 包含多個值(或)
sub_df = df[ df[col_name].str.contains('key1|key2|key3', na=False, case=False) ]
# 不包含,也就是非的過濾
sub_df = df[ ~df[col_name].str.contains('key1', na=False, case=False) ]
上述操作,都假設字段類型是字符串類型,不然會拋異常。可以通過以下的方法,可以判斷字段是否是字符類型:
pd.api.types.is_string_dtype(df[u'車系'])
# 其他類型也有類似的函數,可以用dir查看有哪些類型判斷
print(dir(pd.api.types))
# 可以通過dtypes查看字段的類型
pd.dtypes
pd[u'1-12月銷量'].dtypes
條件過濾
# 大于
df[ df['1-12月銷量'] > 50000 ] .values
# 相等
df[ df['1-12月銷量'] == 50000 ] .values
2.5.數據寫入
添加一行數據:
# 插在最后,row_datas是list
df.loc[len(df.index)] = row_datas
插入一列數據
# 在指定列前面插上一列數據
df.insert( col_index, col_name, col_datas, True)
更新某個單元值
df.iloc[row][col] = u'new-data'
2.6.數據刪除
刪除一列
df2 = df.drop('官方價', axis=1, inplace=False)
print(df2)
# 輸出
銷量排名 車系 從屬品牌 1-12月銷量
0 1 哈弗H6 哈弗 376864
1 2 本田CR-V 本田 249983
2 3 博越 吉利汽車 240811
3 4 途觀L 大眾 178574
4 5 長安CS75 PLUS 長安汽車 266824
.. ... ... ... ...
282 283 北汽新能源EX 北汽新能源 879
283 284 奔騰X40 奔騰 20412
284 285 標致2008新能源 標致 37
285 286 獵豹CS10 獵豹汽車 14
286 287 森雅R7 一汽 1
[287 rows x 4 columns]
刪除一行
df3 = df.drop(2, axis=0, inplace=False)
print(df3)
# 輸出
銷量排名 車系 官方價 從屬品牌 1-12月銷量
0 1 哈弗H6 9.80-15.49萬 哈弗 376864
1 2 本田CR-V 16.98-27.68萬 本田 249983
3 4 途觀L 21.58-28.58萬 大眾 178574
4 5 長安CS75 PLUS 10.69-15.49萬 長安汽車 266824
5 6 本田XR-V 12.79-17.59萬 本田 168272
.. ... ... ... ... ...
282 283 北汽新能源EX 18.39-20.29萬 北汽新能源 879
283 284 奔騰X40 暫無報價 奔騰 20412
284 285 標致2008新能源 16.60-18.80萬 標致 37
285 286 獵豹CS10 7.98-11.98萬 獵豹汽車 14
286 287 森雅R7 6.69-10.69萬 一汽 1
[286 rows x 5 columns]
3.討論
pandas庫用于大數據分析和AI,庫本身比較復雜,很多功能未必用得上,日常使用可以簡單的封裝,能夠讀、寫、搜索excel或csv數據,pandas比起專門操作excel的庫要好用得多,簡單封裝一下即可。詳細的使用說明,可以參見pandas官方文檔。
https://pandas.pydata.org/docs/user_guide/index.html#user-guide
總結
到此這篇關于Python入門學習之使用pandas分析excel數據的文章就介紹到這了,更多相關Python用pandas分析excel內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Python數據分析模塊pandas用法詳解
- Python數據分析庫pandas基本操作方法
- Python數據分析之如何利用pandas查詢數據示例代碼
- 基于Python數據分析之pandas統計分析
- Python數據分析pandas模塊用法實例詳解
- Python數據分析之真實IP請求Pandas詳解
- Python數據分析庫pandas高級接口dt的使用詳解
- 詳解Python數據分析--Pandas知識點
- Python Pandas數據分析工具用法實例
- python利用pandas分析學生期末成績實例代碼