前言:統計分析是數據分析重要的組成部分,它幾乎貫穿了整個數據分析的流程。 應用統計方法,將定量與定性結合,進行的研究活動叫統計分析。統計分析除了 包含單一數值型特徵的數據集中趨勢、離散趨勢和峯度與偏度等統計知識外,還包含了多個特徵比較計算等知識。
一、讀寫不同數據源的數據
1. 文本文件的讀寫
(1)文本文件讀取
文本文件是一種由若干行字符構成的計算機文件,它是一種典型的順序文件。
這裏要介紹的是txt和csv兩種類型文件的讀取。
txt文件我們都很熟悉,常用的文本文檔。
csv 是一種逗號分隔的文件格式,因爲其分隔符不一定是逗號,又被稱爲字 符分隔文件,文件以純文本形式存儲表格數據(數字和文本)。
注:(1)CSV 文件根據其定義也是一種文本文件;(2)文本文件是字符分隔文件
① 使用 read_table 來讀取文本文件
pandas.read_table(filepath_or_buffer,sep=’\t’,header=’infer’, names=None,index_col=None,dtype=None,engine=None,nrows=None)
案例:
order = pd.read_table('meal_order_info.csv',sep=',',encoding='gbk')
print(order)
② 使用 read_csv 函數來讀取 csv 文件
pandas.read_csv(filepath_or_buffer,sep=’\t’,header=’infer’, names=None,index_col=None,dtype=None,engine=None,nrows=None)
案例:
order = pd.read_csv('meal_order_info.csv',encoding='gbk')
print(order)
③ read_table 和 read_csv 常用參數及其說明
以菜品訂單爲例,讀取訂單數據,並統計訂單數據條數
- read_table 和 read_csv 函數中的 sep 參數是指定文本的分隔符的,如果分隔符指定錯誤,在讀取數據的時候,每一行數據將連成一片。
- header 參數是用來指定列名的,如果是 None 則會添加一個默認的列名。
- encoding 代表文件的編碼格式,常用的編碼有 utf-8、utf-16、gbk、gb2312、 gb18030 等。如果編碼指定錯誤數據將無法讀取,IPython 解釋器會報解析錯誤。
正確案例:
(2)文本文件存儲
文本文件的存儲和讀取類似,結構化數據可以通過 pandas 中的 to_csv 函數 實現以 csv 文件格式存儲文件
① to_csv寫入csv 文件
DataFrame.to_csv(path_or_buf=None, sep=’,’, na_rep=”, columns=None, header=True, index=True,index_label=None,mode=’w’,encoding=None)
案例:
>>> df = pd.read_csv('data.csv', encoding='gbk', names=['第一列', '第二列', '第三列', '第四列'])
>>> df
第一列 第二列 第三列 第四列
姓名 語文 數學 英語
陳一 89 90 67
趙二 70 78 90
張三 87 86 79
李四 90 69 84
王五 78 80 69
df.to_csv('data_1.txt')
如果data_1.txt文件不存在,則會新建data_1.txt文件後再寫入,如果本來已存在該文件,則會清空後再寫入,寫入後data_1.txt文件內容如下:
② 參數說明
(3)讀取 Excel 文件
① Excel 文件讀取
pandas 提供了 read_excel 函數來讀取“xls”“xlsx”兩種 Excel 文件。
pandas.read_excel(io, sheetname=0, header=0, index_col=None, names=None, dtype=None)
案例:
detail = pd.read_excel('meal_order_detail.xlsx')
print(detail)
② 參數說明
(4)Excel 文件儲存
將文件存儲爲 Excel 文件,可以使用 to_excel 方法。其語法格式如下:
DataFrame.to_excel(excel_writer=None, sheet_name='None', na_rep=”, header=True, index=True, index_label=None, mode=’w’, encoding=None)
案例:
>>> import pandas as pd
>>> pd.read_excel('data.xlsx')
姓名 語文 數學 英語
陳一 89.0 90.0 67.0
趙二 NaN 78.0 90.0
張三 87.0 NaN 79.0
李四 90.0 69.0 NaN
王五 78.0 80.0 69.0
>>> df = pd.read_excel('data.xlsx')
>>> df.to_excel('data_1.xlsx', na_rep='--')
to_csv 方法的常用參數基本一致,區別之處在於指定存儲文件的文件路徑參 數名稱爲 excel_writer,並且沒有 sep 參數,增加了一個 sheetnames 參數用來 指定存儲的 Excel sheet 的名稱,默認爲 sheet1。
excel_writer:必傳參數,指定需要寫入的excel文件,可以使表示路徑的字符串或者ExcelWriter類對象。
二、查看 DataFrame 的常用屬性
1. 基礎屬性
2. 基礎屬性的練習
import pandas as pd
detail = pd.read_excel('meal_order_detail.xlsx')
print('訂單詳情表的維度爲:',detail.shape)
print('訂單詳情表的軸:',detail.ndim)
print('訂單詳情表的元素個數:',detail.size)
print('訂單詳情表的列名:',detail.columns)
print('訂單詳情表的類型:',detail.dtypes)
print('訂單詳情表的索引:',detail.index)
print('訂單詳情表的元素:',detail.values)
三、DataFrame的操作
我們讀取文件都是<class 'pandas.core.frame.DataFrame'>
DataFrame類型
初學:把表對象當成一個字典,結合numpy二維數組進行操作
detail = pd.read_excel('meal_order_detail.xlsx')
dishes_name = detail['dishes_name']
print(dishes_name)
查看訪問 DataFrame 中的數據——數據基本查看方式
對單列數據的訪問:DataFrame 的單列數據爲一個 Series。根據 DataFrame 的定義可以 知曉 DataFrame 是一個帶有標籤的二維數組,每個標籤相當每一列的列名。有以下兩種 方式來實現對單列數據的訪問
- 以字典訪問某一個 key 的值的方式使用對應的列名,實現單列數據的訪問。
- 以屬性的方式訪問,實現單列數據的訪問。(不建議使用,易引起混淆)
對某一列的某幾行訪問:訪問 DataFrame 中某一列的某幾行時,單獨一列的 DataFrame 可以視爲一個 Series(另一種 pandas 提供的類,可以看作是隻有一列的 DataFrame), 而訪問一個 Series 基本和訪問一個一維的 ndarray 相同。
對多列數據訪問:訪問 DataFrame 多列數據可以將多個列索引名稱視爲一個列表,同時 訪問 DataFrame 多列數據中的多行數據和訪問單列數據的多行數據方法基本相同。
對某一列的某幾行訪問:
以菜品訂單爲例,獲取 dishes_name 列下的前 5 個數據:
dishes_name5 = detail['dishes_name'][:5]
對某幾行訪問: 如果只是需要訪問 DataFrame 某幾行數據的實現方式則和上述的訪問多列多行相似,選 擇所有列,使用“:”代替即可
2. head 和 tail 獲取數據
head 和 tail 也可以得到多行數據,
但是用這兩種方法得到的數據都是從開始或者末尾獲 取的連續數據。默認參數爲訪問 5 行,
只要在方法後方的“()”中填入訪問行數即可實現目標 行數的查看。
print('訂單詳情表中前五行數據爲','\n',detail.head())
print('訂單詳情表中後五個元素爲:','\n',detail.tail())
也可以指定獲取幾行
print('detail前2行數據:',detail.head(2))
3. loc方法—location
說明:可以獲取到指定行或列的數據
格式:表對象.loc[行,列]
(1)獲取所有表的數據
result = detail.loc[:,:]
# result等同於detail
注意:獲取的是所有行和所有列的數據
(2)獲取指定列的數據
result = detail.loc[:,['dishes_name','counts']]
注意:獲取所有行和指定列的數據
(3)獲取指定行的數據
result = detail.loc[:5,['dishes_name','counts']]
print(result)
注意:獲取指定列和前五行的數據
4. 相對不怎麼常用的獲取數據的方式
(1)eg:
print('表格中dishes_name前5行的內容:\n',detail['dishes_name'][:5])
(2)eg:
print('表格中所有列的1~6行的數據:\n',detail[:][1:6])
print(type(detail))#<class 'pandas.core.frame.DataFrame'>
DataFrame—數據結構—傾向於字典
凡是DataFrame類型對象,都可以使用列名獲取數據,eg:detail[‘dishes_name’]
print(type(detail['dishes_name']))#<class 'pandas.core.series.Series'>
Series–序列—表示一組序列數據–傾向於列表
print(type(detail['dishes_name']))#Series
print(type(detail[:]))#DataFrame,爲什麼不是Series?
# :取出的是所有的列所有數據
如:
print(type(detail.columns))
print(detail.columns)