python高級(jí)應(yīng)用與數(shù)據(jù)分析學(xué)習(xí)筆記 13
1督禽、pandas的基本功能
1)數(shù)據(jù)文件讀取 文本數(shù)據(jù)讀取
2)索引隅茎、選取和數(shù)據(jù)過濾
3)算術(shù)運(yùn)算和數(shù)據(jù)對(duì)齊
4)函數(shù)的應(yīng)用和映射
5)重置索引
2吱抚、數(shù)據(jù)文件讀取 文本數(shù)據(jù)讀取
2.1 直接讀取文本數(shù)據(jù)
data01.csv文件
name,age,source
張伊曼,27,90
張巧玲,27,90
張?jiān)娫?27,90
張思思,27,90
data02.txt文件
張伊曼:27:90
張巧玲:27:90
張?jiān)娫?27:90
張思思:27:90
import numpy as np
import pandas as pd
df = pd.read_csv('data01.csv') #默認(rèn)sep=','
print("data01.csv文件的原始數(shù)據(jù)==========================")
print(df)
df = pd.read_csv('data01.csv',header=None) #去除表頭
print("data01.csv文件的去表頭數(shù)據(jù)==========================")
print(df)
df = pd.read_csv('data02.txt',sep=':',header=None) #根據(jù)文本數(shù)據(jù)更換sep
print("data02.txt.txt文件的原始數(shù)據(jù)==========================")
print(df)
2.2 代碼生成數(shù)據(jù)文件然后在讀取
#1.2 代碼生成數(shù)據(jù)文件然后再讀取
df0 = pd.DataFrame(np.arange(18).reshape((6, 3)))
df0.columns = ['張伊曼', '張巧玲', '張?jiān)娫?]
print("df0=============================")
print(df0)
df0.to_csv('df0.csv', index=False)
print("df1=============================")
df1 = pd.read_csv('df0.csv')
print(df1)
注意:當(dāng)設(shè)置index的值唯卖,就會(huì)變成如圖的樣子:
#1.2 代碼生成數(shù)據(jù)文件然后再讀取
df0 = pd.DataFrame(np.arange(18).reshape((6, 3)))
df0.columns = ['張伊曼', '張巧玲', '張?jiān)娫?]
df0.index = ['a1', 'a2', 'a3','a4', 'a5', 'a6']
print("df0=============================")
print(df0)
df0.to_csv('df0.csv')
print("df1=============================")
df1 = pd.read_csv('df0.csv')
print(df1)
3、數(shù)據(jù)過濾獲取
3.1 大概知識(shí)點(diǎn)介紹
1}诸尽、pandas中缺省值NaN的4種處理方法:1 isnull 2 notnull 3 dropna 4 fillna
2}椎例、df.dropna() 默認(rèn)丟棄只要包含nan數(shù)據(jù)的行 axis=1則是丟棄列 how='any'默認(rèn) 如果設(shè)置how='all'則表示全部為nan才丟棄
3}挨决、df.fillna() 默認(rèn)填充數(shù)據(jù),用法與df.dropna()參不多
3.2 dropna()的用法
# 2订歪、數(shù)據(jù)過濾
#2.1 dropna()的用法
dict0 = {
'語文': [90, 80, 60],
'數(shù)學(xué)': [99, 70, 89],
'外語': [98, 10, 75],
'物理': 90
}
df0 = pd.DataFrame(dict0)
df0['數(shù)學(xué)'][1] = np.nan
print("df0原數(shù)據(jù)===============================")
print(df0)
print("df0.dropna()===============================")
print(df0.dropna()) #默認(rèn)刪除有缺省值所在的行
print("df0.dropna(axis=1)===============================")
print(df0.dropna(axis=1)) #默認(rèn)刪除有缺省值所在的列
print("df0.dropna(how='all',axis=1)===============================")
df0.ix[1] = np.nan
print(df0.dropna(how='all')) #當(dāng)所有元素是缺省值的時(shí)候 才刪除
print("df0.dropna(how='any',axis=1)===============================")
df0['外語'][0] = np.nan
print(df0.dropna(how='any')) #當(dāng)所有元素有一個(gè)是缺省值的時(shí)候 才刪除
3.3 fillna() 的用法
# #2.2 fillna()的用法
df0 = pd.DataFrame(np.random.random((7, 3)))
df3 = df0
print('df0的原始數(shù)據(jù)=================================')
print(df0)
df0.ix[:4, 1] = np.nan
print('df0.ix[:4, 1] = np.nan 數(shù)據(jù)=================================')
print(df0)
print('df0.ix[:2, 2] = np.nan 數(shù)據(jù)=================================')
df0.ix[:2, 2] = np.nan
print(df0)
print('將所有的缺省的數(shù)據(jù)填充為1=================================')
print(df0.fillna(1))
print('將所有的缺省數(shù)據(jù)分別填充為1和2=================================')
print(df3.fillna({1: 1, 2: 2}))
3脖祈、Series與DataFrame數(shù)據(jù)去重的方法
unique方法用于獲取Series或DataFrame某列中的唯一值數(shù)組(去重?cái)?shù)據(jù)后的數(shù)組)
value_counts方法用于計(jì)算一個(gè)Series或DataFrame某列中各值的出現(xiàn)頻率
isin方法用于判斷矢量化集合的成員資格,是否在里面刷晋,可用于選取Series中或DataFrame列中數(shù)據(jù)的子集
3.1 Series
# 數(shù)據(jù)去重
s1 = pd.Series(['a', 'b', 'c', 'b', 'a'])
print("s1的原始數(shù)據(jù)==============================")
print(s1)
print("數(shù)據(jù)去重方法:s1.unique()==============================")
print(s1.unique()) #注意:s1.unique()返回的類型也是Series
print("單個(gè)值出現(xiàn)的個(gè)數(shù):s1.value_counts()['a']==============================")
print(s1.value_counts()['a'])
print("值是否存在的方法:s1.isin(['a', 'b'])==============================")
print(s1.isin(['a', 'b']))
3.2 DataFrame
···
df0 = pd.DataFrame(np.random.randint(10, 16, (3, 3)), columns=['張伊曼', '張巧玲', '張?jiān)娫?])
print("df0==============================")
print(df0)
print("df0.ix[0].unique()==============================")
print(df0.ix[0].unique())
print("df0['張伊曼'].unique()==============================")
print(df0['張伊曼'].unique())
print("df0['張伊曼'].value_counts()==============================")
print(df0['張伊曼'].value_counts())
print("df0.ix[0].value_counts()==============================")
print(df0.ix[0].value_counts())
print("df0['張伊曼'].isin([11])==============================")
print(df0['張伊曼'].isin([11]))
···
4盖高、pandas常用的數(shù)學(xué)統(tǒng)計(jì)方法
count 計(jì)算非NA值的數(shù)量
describe 針對(duì)Series或DataFrame列計(jì)算統(tǒng)計(jì)
min/max/sum 計(jì)算最小值 最大值 總和
argmin argmax 計(jì)算能夠獲取到最小值和最大值的索引位置(整數(shù))
idxmin idxmax 計(jì)算能夠獲取到最小值和最大值的索引值
quantile 計(jì)算樣本的分位數(shù)(0到1)
mean 值的平均數(shù)
median 值的中位數(shù)
mad 根據(jù)平均值計(jì)算平均絕對(duì)距離差
var 樣本數(shù)值的方差
std 樣本值的標(biāo)準(zhǔn)差
cumsum 樣本值的累計(jì)和
cummin cummax 樣本的累計(jì)最小值 最大值
cumprod 樣本值的累計(jì)積
pct_change 計(jì)算百分?jǐn)?shù)變化
相關(guān)系數(shù).corr() 以及 協(xié)方差cov()
基本示例:
df0 = pd.DataFrame(np.random.randint(1,10,(4, 3)))
print("df0===============================")
print(df0)
print("df0.describe()===============================")
print(df0.describe())
print("df0.median()===============================")
print(df0.median())
print("df0.var()===============================")
print(df0.var())
print("df0.std()===============================")
print(df0.std())
print("df0.corr()===============================")
print(df0.corr())
print("df0.cov()===============================")
print(df0.cov())