pandas 是 python 的資料分析處理庫
import pandas as pd
1、讀取CSV、TXT檔案
foodinfo = pd.read_csv("pandas_study.csv", encoding = "utf-8")
2、檢視前N條、後N條資訊
foodinfo.head(N)
foodinfo.tail(N)
3、檢視資料框的格式,是DataFrame還是ndarray
print(type(foodinfo)) # 結果:<class 'pandas.core.frame.DataFrame'>
4、檢視有哪些列
foodinfo.columns
5、檢視有幾行幾列
foodinfo.shape
6、列印某一行、某幾行資料
foodinfo.loc[0] foodinfo.loc[0:2] foodinfo.loc[[2, 5, 10]] #注意裡面是一個陣列
7、列印某一列、某幾列資料
foodinfo["dti"] foodinfo[["int_rate", "dti"]] #注意裡面是一個陣列 # 或者: columns = ["int_rate", "dti"] foodinfo[columns]
8、列印所有列的資料型別
foodinfo.dtypes
9、對列的一些相關操作
col_columns = foodinfo.columns.tolist() new_columus = [] for c in col_columns: if c.endswith("s"): new_columus.append(c) print(c) foodinfo[new_columus]
10、加減乘除:將每行都乘以100(加 減 乘 除 一樣)
foodinfo[["int_rate", "dti"]] * 100
11、增加一列
new_col = foodinfo["int_rate"] * 100 foodinfo["new_col"]= new_col
12、列之間的運算
foodinfo["dti"] * foodinfo["int_rate"]
13、檢視列的最大值、最小值、平均值
foodinfo["int_rate"].max() foodinfo["int_rate"].min() foodinfo["int_rate"].mean()
14、按某個欄位排序 - 升序
# inplace是否新建一個dataframe,True不需要 foodinfo.sort_values("int_rate_one", inplace = True) # 按某個欄位排序 - 降序 foodinfo.sort_values("int_rate_one", inplace = True, ascending = False)
15、檢視資料框的一些屬性:最大、最小、均值、四分位數等
foodinfo.describe()
16、空值相關的操作
pin = foodinfo["pin"] pin_isnull = pd.isnull(pin) # 檢視所有空值 pin_isnull_list = foodinfo[pin_isnull] # 找出所有為空值的行 len(pin_isnull_list) # 空值的個數
17、缺失值相關操作
# 簡單的處理辦法就是過濾掉null值 books = foodinfo["life_cycle_books"] book_isnull = pd.isnull(books) book_list_isnull = foodinfo["life_cycle_books"][book_isnull == False] mean = sum(book_list_isnull) / len(book_list_isnull) # 計算平均值
18、根據條件列印某列資料
foodinfo[foodinfo["life_cycle_books"] == 1]
19、資料透視表
import numpy as np # index:要透視的列 # values:要比較的關係列 # aggfunc:具體的關係,預設值:np.mean data_foodinfo = foodinfo.pivot_table(index = ["life_cycle_books", "potential_value_books"], values = "risk_level", aggfunc = np.mean) print(data_foodinfo)
20、刪除缺失值
# 所有行 na_foodinfo = foodinfo.dropna(axis = 1) # 可以指定列 na_foodinfo = foodinfo.dropna(axis = 0, subset = ["life_cycle_books", "potential_value_books"])
21、自由取資料 如:取80行 life_cycle_books列
foodinfo.loc[80, "life_cycle_books"]
22、重新排索引
foodinfo.reset_index(drop = True)
23、自定義函式:返回空值個數
def count_null_columns(column): column_null = pd.isnull(column) list_null = column[column_null] count_null = len(list_null) return count_null foodinfo.apply(count_null_columns)
24、Series
# pandas 三種資料結構 # Series # DataFrame # Panel from pandas import Series
25、Series顯示某一列資料
series_name = taitan["Name"] series_name.values
26、定位某行某列
series_name = taitan["Name"] series_age = taitan["Age"] series_custom = Series(series_age.values, index = series_name) series_custom[["Ahlin, Mrs. Johan (Johanna Persdotter Larsson)", "Asplund, Mrs. Carl Oscar (Selma Augusta Emilia Johansson)"]] # 說明:series_custom[""] 按列取 series_custom[[""]] 按行取
27、取5-10行資料,和上面一樣:
series_custom[5: 10]
28、index變換
old_index = series_custom.index.tolist() sort_index = sorted(old_index) new_index = series_custom.reindex(sort_index) print(new_index)
29、Series按索引和值排序的函式
sc1 = series_custom.sort_index() print(sc1) sc2 = series_custom.sort_values() print(sc2)
30、Series 過濾
series_custom > 0.5 series_custom[series_custom > 0.5] series_custom[(series_custom > 0.5) & (series_custom < 0.9)] # 注:&、| 都是單符號
31、DataFrame
# Series是一行資料,DataFrame是多行資料 # DataFrame 可以看成由多個 Series 組成的 df = pd.read_csv("titanic_train.csv")
32、DataFrame的索引變換
# drop 是否新建立一個DF,True否 False是(表示還要保留Name這一列,否則一會無法進行計算) df_name = df.set_index("Name", drop = False)
33、DataFrame檢視某一型別的資料
types = df_name.dtypes float_columns = types[types.values == "float64"].index df_name[float_columns]
34、DataFrame求方差
float_df = df_name[float_columns] float_df.apply(lambda x: np.std(x))