1. 程式人生 > >Python處理excel基本操作

Python處理excel基本操作

   近期因為工作需要,用Python處理excel表格資料,其中常用的命令如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author  : Peidong
# @Site    : 
# @File    : excel_example.py
# @Software: PyCharm
"""
本例為Python操作excel的常用操作
"""
# 匯入相關模組
import numpy as np
import pandas as pd

# 匯入excel表格
datafile = "C:/Users/dong.pei/Desktop/Excel/移動終端業務單元.xlsx"
data = pd.read_excel(datafile) # 使用shape獲取資料維度(行列) print(data.shape) # 使用info檢視資料表資訊 print(data.info) # 使用dtypes函式檢視資料型別 print(data.dtypes) # 使用Isnull檢驗資料表中的空值 print(data.isnull()) # 使用Unique檢視是否唯一值 只能對特定的列進行操作 print(data['18317079671'].unique()) # 用values檢視資料表數值 print(data.values) # 用columns檢視列名稱
print(data.columns) # 用head函式檢視前n行資料 print(data.head(5)) # 用tail函式檢視後n行資料 print(data.tail(3)) # Python處理空值可以用dropna函式刪除包含空值的資料 # 或者使用fillna函式對空值進行填充 print(data.dropna(how='any')) # 使用數字0填充資料表中空值 print(data.fillna(value=0)) # 使用均值來填充預設值 print(data['序號'].fillna(data['序號'].mean())) # 清理空格特定列 print(data['xuhao'
].map(str.strip)) # 大小寫轉換 print(data['xuhao'].str.upper()) # 使用astype函式修改資料格式 print(data['序號'].astype('float')) # 使用Rename函式修改列名稱 print(data.rename(columns={'序號': '標號'})) # 使用drop_duplicates函式刪除重複值 print(data['序號'].drop_duplicates()) # 指定保留最後一位重複數 print(data['序號'].drop_duplicates(keep='last')) # 使用replace函式實現資料替換 print(data['序號'].replace('1', 'A')) # 使用merge函式實現excel表格的合併,合併方式為inner df_inner = pd.merge(df, df1, how='inner') # 對df_inner資料表設定索引列 df_inner.set_index('id') # 使用sort_values函式或sort_index函式對資料排序 # 特定列的值排序 df_inner.sort_values(by=['age']) # 按索引對資料進行排序 df_inner.sort_index() # 使用where對資料進行判斷和分組,並使用group欄位進行標記 # 如果price列的值>3000,group列顯示hinh,否則顯示low df_inner['group'] = np.where(df_inner['price'] > 3000, 'high', 'low') # 對符合多個條件的資料進行分組標記 # 下面程式碼中對city列等於beijing且price列大於等於4000的資料標記為1 df_inner.loc[(df_inner['city'] == 'beijing') & (df_inner['price'] >= 4000), 'sign']=1 # 使用split函式對欄位進行拆分,並將拆分後的資料表匹配回源資料表中 # 假設category列中的資料包含兩個資訊,前面的數字類別為id,後面的字母為size,中間以連字元進行連線 # 對category欄位的值依次進行分列,並建立資料表,索引值為df_inner的索引列,列名稱為category和size pd.DataFrame((x.split('-') for x in df_inner['category']), index=df_inner.index, columns=['category', 'size']) # 將完成分列後的資料表與原df_inner資料表進行匹配 df_inner = pd.merge(df_inner, split, right_index=True, left_index=True) # 資料提取,主要使用loc和iloc及ix三個函式實現。 # loc函式按標籤值進行提取,iloc函式按位置進行提取,ix函式可以同時按標籤和位置進行提取 # 按索引提取單行的數值 df_inner.loc[3] # 按索引提取區域行的數值 df_inner.loc[0:5] # Res_index函式用於恢復索引 # 重設索引 df_inner.reset_index() # 設定日期為索引 df_inner = df_inner.set_index('date') # 提取4日(指定日期)之前的所有資料 df_inner[:'2013-01-04'] # 使用iloc按位置區域提取資料 df_inner.iloc[:3, :2] # iloc函式除了可以按區域提取資料,還可以按位置逐條提取 # 前方括號中的資料表示所在行的位置,後面括號中的數表示所在列的位置 df_inner.iloc[[0, 2, 5], [4, 5]] # 使用ix索引標籤(行)和位置(列)混合提取資料 df_inner.ix[:'2013-01-04', :4] # 按條件提取資料 # 使用isin函式對city中的值是否為beijing進行判斷 # 判斷city列的值是否為beijing df_inner['city'].isin(['beijing']) # 先判斷city列裡是否包含beijing和shanghai,然後將符合條件的資料提取出來 df_inner.loc[df_inner['city'].isin(['beijing'])] # 使用與,或,非三個條件配合大於,小於和等於對資料進行篩選,並進行計數和求和 # 使用“與”條件進行篩選 年齡大於25且城市為北京 df_inner.loc[(df_inner['age'] > 25) & (df_inner['city'] == 'beijing'), ['id','city','age','category','gender']] # 使用“或”條件進行篩選 年齡大於25或城市為北京 df_inner.loc[(df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id','city','age','category','gender']].sort(['age']) # 使用sum對欄位進行求和 # 對篩選後的資料按price欄位進行求和 df_inner.loc[(df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id','city','age','category','gender','price']].sort(['age']).price.sum() # 使用"非"條件進行篩選 df_inner.loc[(df_inner['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id']) # 使用count進行計數 #對篩選後的資料按city列進行計數 df_inner.loc[(df_inner['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id']).city.count() # 使用query函式進行篩選 df_inner.query('city == ["beijing", "shanghai"]') # 對篩選後的結果按price進行求和 df_inner.query('city == ["beijing", "shanghai"]').price.sum() # python中使用groupby和pivot_table對資料進行彙總 # groupby按列名稱出現的順序進行分組,同時要制定分組後的彙總方式,常見的是計數和求和兩種 # 對所有列進行計數彙總 df_inner.groupby('city').count() # 可以在groupby中設定列名稱來對特定的列進行彙總 # 下面程式碼中按城市對id欄位進行彙總計數 # 對特定的id列進行計數彙總 df_inner.groupby('city')['id'].count() # 分別對city和size兩個欄位進行計數彙總 df_inner.groupby(['city', 'size'])['id'].count() # 除了計數和求和外,還可以對彙總後的資料同時按照多個維度進行計算 # 下面的程式碼中按城市對price欄位進行彙總,並分別計算price的數量,總金額和平均數 # 對city欄位進行彙總並計算price的合計和均值 df_inner.groupby('city')['price'].agg([len, np.sum, np.mean]) # 通過pivot_table函式實現資料透視表功能 # 下面的程式碼中設定city為行欄位,size為列欄位,price為值欄位 # 分別計算price的數量和金額並且按照行與列進行彙總 # 資料透視表 pd.pivot_table(df_inner, index=['city'], values=['price'], columns=['size'], aggfunc=[len,np.sum], fill_value=0, margins=True) # python通過sample函式完成資料取樣 # sample是進行資料取樣的函式,設定n的數量就可以,自動返回 # 簡單的資料取樣 df_inner.sample(n=3) # weights引數是取樣的權重,通過設定不同的權重可以更改取樣的結果,權重高的資料將更有希望被選中 # 手動設定取樣權重 weights = [0, 0, 0, 0, 0.5, 0.5] df_inner.sample(n=2, weights=weights) # sample函式中的引數replace用來設定取樣後是否放回 # 取樣後不放回 df_inner.sample(n=6, replace=False) # 取樣後放回 df_inner.sample(n=6, replace=True) # python通過describe對資料進行描述統計 # describe函式自動生成資料的數量,均值,標準差等資料 # 下面的程式碼對資料表進行描述統計,並使用round函式設定結果顯示的小數位,並進行轉置 # 資料表描述性統計 df_inner.describe().round(2).T # python中使用std函式用來計算特定資料列的標準差 df_inner['price'].std() # Python使用cov函式計算亮哥欄位或資料表中各欄位間的協方差 # 計算兩個特定欄位間的協方差 df_inner['price'].cov(df_inner['m-point']) # 計算資料表中所有欄位間的協方差 df_inner.cov() # Python中使用corr函式完成資料相關分析的操作,並返回相關係數 # 計算兩個特定欄位間的相關性 df_inner['price'].corr(df_inner['m-point']) # 計算整個資料表的相關性 df_inner.corr() # 匯出檔案 # 輸出到excel格式 df_inner.to_Excel('Excel_to_Python.xlsx', sheet_name='bluewhale_cc') # 輸出到csv檔案 df_inner.to_csv('Excel_to_Python.csv')