Python 數(shù)據(jù)分析:Pandas 數(shù)據(jù)操作(一)
在掌握了Pandas的數(shù)據(jù)結(jié)構(gòu)后,接下來(lái)應(yīng)該學(xué)會(huì)如何操作數(shù)據(jù)?,F(xiàn)在讓我們來(lái)看看在Pandas中如何定位和操作數(shù)據(jù)。

1. 一般操作
首先,我們應(yīng)該知道當(dāng)某個(gè)變量名指向Pandas數(shù)據(jù)時(shí)(或者理解為Pandas格式數(shù)據(jù)賦值給變量),其對(duì)應(yīng)就可以使用Pandas的方法,這是類(lèi)的特性。
# Series數(shù)據(jù)格式賦值給變量s
s = pd.Series([1,2,3])
# DataFrame數(shù)據(jù)格式賦值給變量df
df = pd.DataFrame([[1,2],[3,4]],columns=['a','b'])通過(guò)上面的賦值后,變量s、df就各自獲得了對(duì)于Pandas數(shù)據(jù)格式的操作方法??梢允褂胔ead()、tail()方法查看其數(shù)據(jù)的前或后5條記錄。
>>>s.head()
01
12
23
dtype: int64
>>>df.head()
ab
01  2
1  3  4對(duì)于不同的數(shù)據(jù)格式,可以通過(guò)index和column定位到元素。一般通過(guò).iloc[]切片方法定位,不同的軸在方括號(hào)內(nèi)用逗號(hào)隔開(kāi)。如下:
>>> s.iloc[1]  # Series的具體元素
2
>>> s.iloc[1:]  # Series的連續(xù)元素切片
1    2
2    3
dtype: int64
>>> df.iloc[1,1]  # DataFrame的具體元素
4
>>> df.iloc[1,:]  # DataFrame的某行切片(Series),也可以多行(DataFrame)
a    3
b    4
Name: 1, dtype: int64
>>> df.iloc[:,0]  # DataFrame的某列切片(Series),也可以多行(DataFrame)
0    1
1    3
Name: a, dtype: int6這里要注意,Series數(shù)據(jù)格式是一維數(shù)據(jù),只有index索引;DataFrame數(shù)據(jù)格式是二維數(shù)據(jù),有index和column索引。.iloc[]方法一般是按照自然數(shù)索引定位數(shù)據(jù)的,有時(shí)我們明確知道index、column的索引值,希望用具體的索引值定位,這時(shí)我們可以用.loc[]方法。
>>> df.loc[1,'b']  # DataFrame的具體元素
4
>>> df.loc[1,:]  # DataFrame的某行切片(Series),也可以多行(DataFrame)
a    3
b    4
Name:1, dtype: int64
>>> df.loc[:,'b']  # DataFrame的某列切片(Series),也可以多行(DataFrame)
02
14
Name: b, dtype: int64到這里,我們已經(jīng)知道如何使用.iloc[]、.loc[]方法進(jìn)行元素、切片處理,另外,要記住方括號(hào)內(nèi)是接受python切片風(fēng)格的。
可以通過(guò)shape屬性,查看其大小。
>>> s.shape
(3,)
>>> df.shape
(2, 2)可以通過(guò)dtypes屬性,查看變量類(lèi)型。
>>> s.dtypes
dtype('int64')
>>> df.dtypes
a    int64
b    int64
dtype: object可以通過(guò)decribe()方法,查看變量的簡(jiǎn)單描述統(tǒng)計(jì)。默認(rèn)會(huì)列出元素?cái)?shù)量,平均值,標(biāo)準(zhǔn)差,極值和四分位數(shù)。
>>> s.describe()
count    3.0
mean     2.0
std      1.0
min      1.0
25%      1.5
50%      2.0
75%      2.5
max      3.0
dtype: float64
>>> df.describe()
ab
count  2.000000  2.000000
mean   2.000000  3.000000
std    1.414214  1.414214
min    1.000000  2.000000
25%    1.500000  2.500000
50%    2.000000  3.000000
75%    2.500000  3.500000
max    3.000000  4.0000002. 篩選
對(duì)于數(shù)據(jù)篩選,這里直接通過(guò)案例進(jìn)行講解。首先生成100條數(shù)據(jù),然后按照需求篩選數(shù)據(jù)。
# 生成演示數(shù)據(jù)
>>> s = pd.Series(np.random.random(100))
>>> df = pd.DataFrame(np.random.random(200).reshape(100,2),
...                   columns=['a','b'])
# 篩選s中>0.95的數(shù)據(jù)
>>> s[s>0.95]
40.954258
90.975997
110.997384
190.970825
400.961048
930.971340
dtype: float64
# 篩選df中'a'列元素值>0.95的行
>>> df[df['a']>0.95]
           a         b
160.9627330.817430
290.9995350.549727
510.9953340.097591
540.9522940.138212
940.9851170.959374
# 篩選df中'a'列元素值不小于0.95的行
>>> df[~(df['a']<=0.95)]
           a         b
160.9627330.817430
290.9995350.549727
510.9953340.097591
540.9522940.138212
940.9851170.959374
# 篩選df中'a'或'b'列元素值>0.95的行
>>> df[(df['a']>0.95) | (df['b']>0.95)]
           a         b
6   0.445481  0.958583
16  0.962733  0.817430
29  0.999535  0.549727
37  0.501890  0.960820
51  0.995334  0.097591
54  0.952294  0.138212
59  0.357409  0.983461
94  0.985117  0.959374
# 篩選df中'a'和'b'列元素值均>0.9的行
>>> df[(df['a']>0.9) & (df['b']>0.9)]
           a         b
94  0.985117  0.959374要篩選某個(gè)pandas變量中的元素,只需要在變量后面加方括號(hào),并在括號(hào)內(nèi)寫(xiě)入條件即可。這里要注意,多個(gè)條件時(shí)應(yīng)將每個(gè)條件用圓括號(hào)括起來(lái),之間可以用與&、或|、非~連接。
3. 修改
對(duì)于數(shù)據(jù)修改,這里直接通過(guò)案例進(jìn)行講解。首先生成5條數(shù)據(jù),然后按照需求修改數(shù)據(jù)。
# 生成演示數(shù)據(jù)
>>> df = pd.DataFrame(np.random.random(10).reshape(5,2),
...                   columns=['a','b'])
>>> df
          a         b
00.4985220.895257
10.056069  0.873136
20.7289030.627868
30.3203840.909901
40.1754440.284480
# 將b列的數(shù)據(jù)修改為1
>>> df['b']=1
>>> df
          a  b
00.4985221
10.056069  1
20.7289031
30.3203841
40.1754441
# 將b列的數(shù)據(jù)修改為a列的10倍數(shù)
>>> df['b']=df['a']*10
>>> df
          a         b
00.4985224.985216
10.056069  0.560688
20.7289037.289034
30.3203843.203838
40.1754441.754438
# 如果a列的值>0.5,則b列值為1,否則為0。
>>> df['b']=df.apply(lambda x:1 if x['a']>0.5 else 0,axis='columns')
>>> df
          a  b
00.4985220
10.056069  0
20.7289031
30.3203840
4  0.175444  0上述數(shù)據(jù)修改的方法要重點(diǎn)掌握apply(),它可以接受函數(shù)處理數(shù)據(jù)。這里是用了1個(gè)匿名函數(shù)(,并按照columns軸進(jìn)行數(shù)據(jù)分析,然后賦值給b列。















 
 
 
















 
 
 
 