pandas經常使用操做總結【持續更新】

一.iloc 按索引取行列,多是一行多行,或者一列多列,或者某行某列bash

>>> df
      a     b     c     d
0     1     2     3     4
1   100   200   300   400
2  1000  2000  3000  4000
複製代碼

取某行:app

>>> df.iloc[0]
a    1
b    2
c    3
d    4
Name: 0, dtype: int64
複製代碼

取多行:ide

>>> df.iloc[:3]
      a     b     c     d
0     1     2     3     4
1   100   200   300   400
2  1000  2000  3000  4000
複製代碼

取某行某列:函數

df.iloc[[0, 2], [1, 3]]
      b     d
0     2     4
2  2000  4000
複製代碼

取多行多列:ui

df.iloc[1:3, 0:3]
      a     b     c
1   100   200   300
2  1000  2000  3000
複製代碼

二.loc 按名稱取行列,多是一行多行,或者一列多列,或者某行某列spa

>>> df
            max_speed  shield
cobra               1       2
viper               4       5
sidewinder          7       8
複製代碼

取一行,返回的是一個series:code

df.loc['viper']
返回結果是:
max_speed    4
shield       5
Name: viper, dtype: int64
複製代碼

取多行,返回的是一個series:orm

df.loc['cobra':'viper', 'max_speed']
cobra    1
viper    4
Name: max_speed, dtype: int64
複製代碼

兩層中括號[[]]取一行或多行,返回一個dataframe:cdn

df.loc[['viper', 'sidewinder']]
            max_speed  shield
viper               4       5
sidewinder          7       8
複製代碼

3、groupby 按必定條件將數據分組並按分組取得各組數據blog

>>> 原始datframe:df
   Animal  Max Speed
0  Falcon      380.0
1  Falcon      370.0
2  Parrot       24.0
3  Parrot       26.0
複製代碼

按照Animal是否爲Falcon,進行分組,並取出各組dataframe

df1=df.groupby(df.Animal=='Falcon')  #分組操做
df2=df1.get_group(False)#將分組結果,結果爲False即不含有的保存爲df2
df3=df1.get_group(True)#將分組結果,結果爲True即含有的保存爲df3
複製代碼

打印結果:

4、兩個dataframe合併 merge

df1 = pd.DataFrame({'lkey': [ 'bar', 'baz', 'foo'],
               'value': [2, 3, 5]})

df2 = pd.DataFrame({'lkey': ['bar', 'baz', 'foo'],
                    'value': [ 6, 7, 8]})
print(df1)
print(df2)
df1.merge(df2,how='left',on='lkey')
輸出結果:
 lkey  value
0  bar      2
1  baz      3
2  foo      5

  lkey  value
0  bar      6
1  baz      7
2  foo      8
Out[66]:
lkey	value_x	value_y
0	bar	2	6
1	baz	3	7
2	foo	5	8

複製代碼

how='left'是鏈接方式,本例是左鏈接

on='lkey'是鍵的選擇,左右鏈接方式是按lkey相同來合併

5、看dataframe的行數與列數 shape

y_pd是一個dataframe
print('行數:',y_pd.shape[0])
print('列數:',y_pd.shape[1])
複製代碼

6、一列數據是str,替換其中某字符 .str.replace

df = pd.DataFrame({"抽菸": ['1-2', '2-3', '4-7'], "B": [4, 5, 6]})
df["抽菸"]=df["抽菸"].str.replace('-',',')
原始df:
	B	抽菸
0	4	1-2
1	5	2-3
2	6	4-7

替換後df:

B	抽菸
0	4	1,2
1	5	2,3
2	6	4,7
#對字符作截取.str[n:m],取第n-m個字符
df['抽菸']=df['抽菸'].str[0:-1]
	B	抽菸
0	4	1-
1	5	2-
2	6	4-
複製代碼

7、修改列名 rename

df = pd.DataFrame({"抽菸": [1, 2, 3], "B": [4, 5, 6]})
df.rename(columns={"抽菸": "煙齡/每日幾支"'B':'喝酒'},inplace=True)

B	抽菸
0	4	1
1	5	2
2	6	3
變爲
	喝酒	煙齡/每日幾支
0	4	1
1	5	2
2	6	3


複製代碼

8、將某一列或者幾列中的值替換爲另外一個值 replace

df = pd.DataFrame({'A': [',', '/', '='],
                  'B': ['1', 'b', '/']})
df.replace({'A':',','B':'b'},'換')
原來df:
	A	B
0	,	1
1	/	b
2	=	/

變化後:

        A       B
0	換	1
1	/	換
2	=	/
複製代碼

對整個df中某個值作替換

df.replace('/','全換')
全換後:
	A       B
0	,	1
1	全換	b
2	=	全換
複製代碼

經過字典的嵌套,實現對任意列任意值的替換:

df.replace({'A': {'=': '==', '/': '//'},'B':{'1':'111'}} )
替換後:

        A	B
0	,	111
1	//	b
2	==	/

複製代碼

9、若是a列的值等於m,修改b列的值爲n

df.loc[df['a']==m,'b']=n

修改前df:
a	b
14	360
ba0	360
13	180
df.loc[df['a'] == '13','b'] =666 
修改以後:
a	b
14	360
ba0	360
13	666
複製代碼

10、刪除某一列或者幾列 drop

df = pd.DataFrame({'a': ['1/1', '13/12', '14/1'],
                 'b': [360, 180, 360],'c':[1,2,3]  })
df.drop(columns=['a','b'],axis=1,inplace=True)
原df:

        a	b	c
0	1/1	360	1
1	13/12	180	2
2	14/1	360	3

刪除後:
        c
0	1
1	2
2	3
複製代碼

11、一列拆分紅兩列 str.split('符號')

df = pd.DataFrame({'a': ['1/1', '13/12', '14/1'],
                 'b': [360, 180, 360],'c':[1,2,3]  })
                 
方法一:
df2=pd.DataFrame(df['a'].str.split('/',expand=True))
df2以下:
	0	1
0	1	1
1	13	12
2	14	1

方法2:
df2=pd.DataFrame(  (a.split('/') for a in df['a']),
                    index=df.index,columns=['拆1','拆2'])
df2以下:
      拆1	拆2
0	1	1
1	13	12
2	14	1
複製代碼

12、apply函數與匿名函數合用作批量修改

df = pd.DataFrame({'a': ['1/1', '13/12', '14/1'],
                 'b': [360, 180, 360],'c':[1,2,3]  })
                 
df['a']=df['a'].apply(lambda x:x[0])
#至關於對a這一列作變換,都改成第一個字符
df
	a	b	c
0	1	360	1
1	1	180	2
2	1	360	3
複製代碼

十3、read_csv中 parse_dates參數

讀取時,使某一列或幾列爲datetime類型,爲日期列。

pd.read_csv('path',parse_dates=['1'])
-> 解析1列的值做爲獨立的日期列;
複製代碼

十4、缺失值檢測 isna()==isnull()

df = pd.DataFrame({'age': [5, 6, 2,1],
                   'born': [pd.NaT, pd.Timestamp('1939-05-27'),
                             pd.Timestamp('1940-04-25'),pd.Timestamp('1939-05-27')],
                  'name': ['Alfred', 'Batman', '','11'],
                   'toy': [None, 'Batmobile', 'Joker','2d']})
【1】df.isna()
輸出:是一個dataframe,反映了每一個位置是否爲缺失值
        age	born	name	toy
0	False	True	False	True
1	False	False	False	False
2	False	False	False	False
3	False	False	False	False

【2】df.isna().sum()
輸出:是一個Series,反映了每列空值的個數
age     0
born    1
name    0
toy     1
dtype: int64

【3】df.isna().any()
輸出:是一個Series,反映了每列是否有空值
age     False
born     True
name    False
toy      True
dtype: bool
【4】df.isna().sum().any()
輸出:一個布爾值,反映了整個表是否有空值
True
【5】percent = (df.isnull().sum())/(df.isnull().count()*100)
輸出:反映了每列空值的佔比
age     0.0000
born    0.0025
name    0.0000
toy     0.0025
dtype: float64

複製代碼

十5、對Series裏面的每一個值進行計數而且排序 value_counts()

index = pd.Index([3, 1, 2, 3, 4, np.nan])
index.value_counts()
輸出:
3.0    2
4.0    1
2.0    1
1.0    1
複製代碼
df = pd.DataFrame({'a': ['1/1', '13/12', '14/1'],
                 'b': [360, 180, 360],'c':[1,2,3]  })
df['a'].value_counts()
輸出:
1/1      1
14/1     1
13/12    1
Name: a, dtype: int64
df['a'].value_counts().values
array([1, 1, 1])
df['a'].value_counts().index
Index(['1/1', '14/1', '13/12'], dtype='object')
複製代碼

十6、按多個列進行分組

先按gender進行分組,在每一個gender內按照happiness進行分組並統計。

train.groupby(['gender','happiness']).happiness.count()
gender  happiness
1       1              43
        2             216
        3             588
        4            2306
        5             599
2       1              61
        2             281
        3             571
        4            2512
        5             811
複製代碼

畫圖來看就是

import seaborn as sns
sns.countplot('gender',hue='happiness',data=train)
複製代碼

結果爲:

十7、concat以後的索引重置

df.reset_index(drop=True)
複製代碼

否則的話,索引還和concat以前同樣,出現重複的現象。

十8、值填充時-用出現次數最多的填充

對a列中,值小於0的填充爲除去空值之外出現最多的值
df.loc[df['a']<0,'a']=df['a'].dropna().mode().values
複製代碼

十9、按照一列的分組計算另外一列的均值

df = pd.DataFrame({"name": ['1', '1', '2'],
                   "toy": [10, 20, 30],
                   "born": [1, 2,
                             3]})
df['d']=df.groupby(df['name']=='1')['toy'].transform('mean').values
output:
	born	name	toy	d
0	1	1	10	15
1	2	1	20	15
2	3	2	30	30

複製代碼
相關文章
相關標籤/搜索