一、简介
Pandas 是 Python 中的数据操纵和分析软件包,它是基于Numpy去开发的,所以Pandas的数据处理速度也很快,而且Numpy中的有些函数在Pandas中也能使用,方法也类似。
Pandas 为 Python 带来了两个新的数据结构,即 Pandas Series(可类比于表格中的某一列)和 Pandas DataFrame(可类比于表格)。借助这两个数据结构,我们能够轻松直观地处理带标签数据和关系数据。
二、创建Pandas Series
可以使用 pd.Series(data, index) 命令创建 Pandas Series,其中data表示输入数据, index 为对应数据的索引,除此之外,我们还可以添加参数dtype来设置该列的数据类型。
1 2 3 4 5 6 7 8 9
| import pandas as pd pd.Series(data = [30, 6, 7, 5], index = ['eggs', 'apples', 'milk', 'bread'],dtype=float)
out: eggs 30.0 apples 6.0 milk 7.0 bread 5.0 dtype: float64
|
data除了可以输入列表之外,还可以输入字典,或者是直接一个标量。
1 2 3 4 5 6
| pd.Series(data={'name':'michong','age':18})
out: name michong age 18 dtype: object
|
三、访问和删除Series中的元素
1、访问
一种类似于从列表中按照索引访问数据,一种类似于从字典中按照key来访问value。
1 2 3 4 5 6 7 8 9 10 11 12
| s = pd.Series(data=8,index=['apple','milk','bread'])
s[0] out: 8
s['apple'] out: 8 s.loc['apple'] s.iloc[1]
|
2、修改
修改完记得重新赋值即可
3、删除
1 2 3 4 5
| s.drop(['apple']) out: milk 8 bread 8 dtype: int64
|
.drop()函数并不会修改原来的数据,如果你想要修改原数据的话,可以选择添加参数inplace = True或者是用原数据替换s = s.drop(label)
1
| s.drop(['apple'],inplace=True)
|
四、DataFrame的使用
1、创建DataFrame
pd.DataFrame(data, index, columns)
1 2 3 4 5
| data是数据,可以输入ndarray,或者是字典(字典中可以包含Series或arrays或),或者是DataFrame;
index是索引,输入列表,如果没有设置该参数,会默认以0开始往下计数;
columns是列名,输入列表,如果没有设置该参数,会默认以0开始往右计数;
|
1 2 3 4 5 6 7 8
| d = [[1,2],[3,4]] df = pd.DataFrame(data=d,index=['a','b'],columns=['one','two']) df
out: one two a 1 2 b 3 4
|
2、访问DataFrame中的元素
- 访问单行
1 2 3 4 5 6 7 8
| df.loc['a'] df.iloc[0]
out: one 1 two 2 Name: a, dtype: int64
|
- 访问多行
1 2 3 4 5 6 7
| df.loc[['a','b']] df.iloc[[0,1]]
out: one two a 1 2 b 3 4
|
1 2 3 4 5 6 7 8
| df.one df['one'] df.iloc[:,0]
out: a 1 b 3 Name: one, dtype: int64
|
1 2 3 4 5 6 7
| df[['one','two']] df.iloc[:,0:2]
out: one two a 1 2 b 3 4
|
1 2 3 4 5
| df.iloc[0,1] df['two']['a']
out: 2
|
3、删除、增加元素
使用.drop函数删除元素,默认为删除行,添加参数axis = 1来删除列。
1 2 3 4
| df.drop(['a']) out: one two b 3 4
|
1 2 3 4 5 6
| df.drop('one',axis=1)
out: two a 2 b 4
|
==值得注意的是,drop函数不会修改原数据,如果想直接对原数据进行修改的话,可以选择添加参数inplace = True或用原变量名重新赋值替换。==
- 增加元素
一种是append(),另外一种是insert()
1 2 3 4 5 6 7 8 9 10 11 12 13
| df.insert(2,'T',8)
out: one two T a 1 2 8 b 3 4 8
df.insert(2,'F',[9,10]) out: one two F T a 1 2 9 8 b 3 4 10 8
|
1 2 3 4 5 6 7 8 9 10 11
| data2 = pd.DataFrame([[8,9,10,11],[6,7,8,9]], columns=['one','two','F','T'] ,index=['c','d']) df.append(data2,ignore_index=True)
out: one two F T 0 1 2 9 8 1 3 4 10 8 2 8 9 10 11 3 6 7 8 9
|
4、重命名
- 修改列的名称
1 2 3 4 5
| df.rename(columns={'one':'第一列'}) out: 第一列 two F T a 1 2 9 8 b 3 4 10 8
|
- 修改行的名称
1 2 3 4 5
| df.rename(index={'a':'第一行'}) out: one two F T 第一行 1 2 9 8 b 3 4 10 8
|
5、更改索引
1 2 3
| 可以使用函数set_index(index_label),将数据集的index设置为index_label。
除此之外,还可以使用函数reset_index()重置数据集的index为0开始计数的数列。
|
6、缺失值(NaN)处理
可以使用isnull()和notnull()函数来查看数据集中是否存在缺失数据,在该函数后面添加sum()函数来对缺失数量进行统计。除此之外,还可以使用count()函数对非NaN数据进行统计计数。
- 删除NaN – df.dropna()
dropna()函数还有一个参数是how,当how = all时,只会删除全部数据都为NaN的列或行。
==不修改原来的数据==
1 2 3 4 5 6
| df.fillna(0) out: 0 1 F T one two a 0.0 0.0 9.0 8.0 1.0 2.0 b 0.0 0.0 10.0 8.0 3.0 4.0 0 5.0 6.0 0.0 0.0 0.0 0.0
|
1 2 3 4 5 6 7 8 9 10
| 使用fillna()函数可以替换NaN为某一值。其参数如下: value:用来替换NaN的值 method:常用有两种,一种是ffill前向填充,一种是backfill后向填充 axis:0为行,1为列 inplace:是否替换原数据,默认为False limit:接受int类型的输入,可以限定替换前多少个NaN
|
五、数据分析流程及Pandas应用
1、打开文件
1 2 3 4 5 6
| pd.read_csv('filename')
pd.read_excel('filename')
pd.read_csv('filename',sep = '\t',encoding = 'utf-8')
|
2、查看数据
1 2 3 4 5 6
| df.head()
df.tail()
df.sample()
|
3、查看数据信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| df.shape
df.info()
df.describe()
df.columns
df.isnull().sum()
df[df['col_name'].isnull()]
sum(df.duplicated())
df[df.duplicated()]
df['col_name'].value_counts()
df['col_name'].unique()
df['col_name'].nunique()
df.sort_values(by = 'col_name',ascending = False)
|
4、数据筛选
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| df.iloc[row_index] df.loc['row_name']
df.iloc[row_index_1:row_index_2]
df['col_name']
df[['col_name_1','col_name_2']]
df.iloc[row_index,col_index] df.loc['row_name','col_name']
df[df['col_name'] == value] df.query('col_name == value') df[(df['col_name_1'] >= value_1) & (df['col_name_2'] != value_2)] df.query('(col_name_1 >= value_lower) & (col_name_2 <= value_upper)') df.groupby('col_name').groups
|
5、数据清理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| df.drop(['row_name'],inplace = True)
df.drop(['col_name'],axis = 1)
df.fillna(mean_value) df.dropna() df.dropna(axis = 1, how = 'all')
drop_duplicates(inplace = True)
用iloc或者loc直接替换修改即可
df['datetime_col'] = pd.to_datetime(df['datetime_col']) df['col_name'].astype(str)
df.rename(columns={'A':'a', 'C':'c'}, inplace = True)
df['col_name'].apply(function)
|