pandas學習筆記(1)——series和dataframe
阿新 • • 發佈:2020-12-25
Series一維,DataFrame二維,是pandas的核心
Series的建立
方法一:用ndarray建立,傳遞一個列表或陣列 s = Series(data = np.random.randint (0,150,size = 10),index =list('abcdefghij'),name = 'python') '''Out[4]: a 106 b 98 c 75 d 25 e 70 f 105 g 99 h 148 i 124 j 19 Name: python, dtype: int32 ''' #方法2:通過字典來建立(key,value) s2 = Series({'a':110,'b':120,'c':130,'d':140}) ''' Out[5]: a 110 b 120 c 130 d 140 dtype: int64 ''' type(s) ''' Out[6]: pandas.core.series.Series '''
#索引
s[['d','e','e','f']]#這是顯式索引
'''
Out[10]:
d 16
e 143
e 143
f 90
Name: python, dtype: int32
'''
s[[2,-1,-3,4]]#這是隱式索引
'''
Out[11]:
c 61
j 49
h 125
e 143
Name: python, dtype: int32
'''
s.iloc[[0,2,1]]#通過隱式索引呼叫
s.loc[['a','c','c']]#通過顯式索引呼叫
#切片 s['a':'f'] s['a':'w']#索引w不存在,則從a取到末尾 s[::2] s['b':'j':-1]#原理與numpy相同,同樣也可以加上loc或者iloc #series的一些屬性: s.shape() s.size() s.index() s.value()#後面這兩個返回一個ndarray s.head(n) s.tail(n)#展示資料的前、後n個數據,預設5個 #空值的處理: s[['b','d']] = np.NaN ''' Out[15]: a 96.0 b NaN c 61.0 d NaN e 143.0 f 90.0 g 118.0 h 125.0 i 76.0 j 49.0 Name: python, dtype: float64 ''' cond = s.isnull()#查詢空資料,返回一個全是布林值的列表,為空的值是true s[cond]#提取所有空值 cond = s.notnull() s[cond]#提取所有非空值
#給一個series起名 s2.name = 'Math' s2+10#效果作用在每一個元素上,廣播效果 s.add(10)#與上一行效果相同 s.add(10,fill_value = 10)#把所有NaN資料填充成10,然後再進行加法運算 s.astype(int8)#改變資料型別,只改value部分,不改index部分 #還有一些統計學函式,s.pow(2),s.std(),s.max()等等,和numpy相同 s.value_counts()#統計每個資料出現的次數 #一個例項,#統計每個型別的檔案出現次數 a = ['aaaa.mp3','bbbb.mp4','cccc.mp3','dddd.avi'] def count_(a): return Series([i.split('.')[-1] for i in a]).value_counts() count_(a) ''' Out[17]: mp3 2 mp4 1 avi 1 dtype: int64 '''
datafarame***核心中的核心,非常重要,一行是一個樣本,一列是一個屬性
#建立:
df = DataFrame(data = {'python':np.random.randint(0,150,size = 5),
'MATH':np.random.randint(0,150,size = 5),
'English':np.random.randint(0,150,size = 5)},
index = list('ABCDE'))
'''
Out[22]:
python MATH English
A 32 121 89
B 40 119 119
C 136 86 103
D 36 70 119
E 93 111 111
'''
#建立方式2:
df2 = DataFrame(data = np.random.randint(0,150,size = (5,4)),
index = list('abcde'),
columns = list(['python','math','english','chinese']))
'''
Out[25]:
python math english chinese
a 90 144 35 59
b 79 52 128 119
c 61 121 8 12
d 141 96 139 17
e 75 90 46 142
'''
#檔案的儲存:下面的方法如果原檔案存在,則會將其覆蓋
df2.to_csv('C:\\Users\\shm\\Desktop\\python_data\\data\\df2.csv')
df2.to_excel('C:\\Users\\shm\\Desktop\\python_data\\data\\df2.xlsx')
#檔案的讀取:
df3 = pd.read_csv('C:\\Users\\shm\\Desktop\\python_data\\data\\df2.csv')#再讀回來索引就變成了一種屬性
'''
Out[28]:
Unnamed: 0 python math english chinese
0 a 90 144 35 59
1 b 79 52 128 119
2 c 61 121 8 12
3 d 141 96 139 17
4 e 75 90 46 142
'''
#把第一列變成索引的方法:
df3 = df3.rename(mapper = {'Unnamed: 0':'index'},axis = 1)#axis = 0是預設值,會在行名中檢索index,所以不會有變化
df3
df3.set_index(keys = 'index')
#dataframe的一些屬性:
df.shape() df.size()等,方法與前面類似
#dataframe其實就是就是多個series組成共用一個index
#dataframe獲取某列資料的方法:
df.python 或 df['math'] df[['math','python']]
#獲取某行的方法:用.或者[]都不行,用loc
df2.loc[['a','c']]
df2.iloc[[1,2]]#與series相同
#獲取某一元素
df2['math']['b']#先列後行
df2.loc['b']['math']#先行後列
df2.loc['index','columns']
#切片
df2['a':'c']#不能直接對列切片
#列切片的唯一方法:
df2.iloc[:,1:3]
#dataframe的運算:加減乘除都有廣播效果
df2.cov() #協方差
'''
Out[48]:
python math english chinese
python 946.20 -33.15 1260.95 -660.20
math -33.15 1198.80 -1416.40 -1140.35
english 1260.95 -1416.40 3440.70 359.80
chinese -660.20 -1140.35 359.80 3469.70
'''
df2.corr()#相關性係數
'''
Out[49]:
python math english chinese
python 1.000000 -0.031126 0.698848 -0.364366
math -0.031126 1.000000 -0.697412 -0.559138
english 0.698848 -0.697412 1.000000 0.104134
chinese -0.364366 -0.559138 0.104134 1.000000
'''
df2.describe()#很好用
'''
Out[50]:
python math english chinese
count 5.000000 5.000000 5.00000 5.000000
mean 89.200000 100.600000 71.20000 69.800000
std 30.760364 34.623691 58.65748 58.904159
min 61.000000 52.000000 8.00000 12.000000
25% 75.000000 90.000000 35.00000 17.000000
50% 79.000000 96.000000 46.00000 59.000000
75% 90.000000 121.000000 128.00000 119.000000
max 141.000000 144.000000 139.00000 142.000000
'''
兩個資料框進行加減乘除,對應元素進行加減乘除,多餘的元素填充NaN補齊,想用別的元素補齊,用df.add(df2,fill_value = n)
#Series與dataframe之間的運算:
'''對下面這個dataframe進行操作
out[4]:
python MATH English
A 112 51 69
B 127 144 109
C 44 79 22
D 123 95 104
E 59 47 70
'''
s = df.loc['A']#取一行
df.add(s)#對每一行執行add操作,預設axis = 0或columns,每一行加上這個series,axis = 1或index對每一列遍歷相加
'''
python MATH English
A 224 102 138
B 239 195 178
C 156 130 91
D 235 146 173
E 171 98 139
'''