目录
一、安装并导入 Pandas 模块:
安装 Pandas 模块:
在终端输入:pip install pandas
导入 Pandas 模块:
import pandas as pd
二、Pandas 数据结构之 Series:
series 数据类型类似一维数组,由索引和列构成。
pd.Series( data, index, dtype, name, copy)
参数 | 描述 |
---|---|
data | 数据 |
index | 索引,默认从0开始 |
dtype | 数据类型,默认自己判断 |
name | series 名称 |
copy | 拷贝数据,默认为 False |
实例:
一维数组:
a = [1,2,3]
x = pd.Series(a)
print(x)
输出:
其中, 左侧一列为索引,右侧一列为数据,下面则为数据类型。
多维数据及索引:
a=[[1,2,3],[4,5,6]]
x=pd.Series(a,index = ['a','b'])
print(x)
输出:
可知:多维数组,series 会将其“视为”一维数组,以逗号分隔每一个元素;此外,索引支持自定义。
根据索引值读取数据:
print(x['a'])
输出:
根据索引值读取多个数据:
a=[[1,2,3],[4,5,6]]
x=pd.Series(a,index = ['a','b'])
print(x[['a','b']])
输出:
利用字典对象创建 Series:
x = {'a':'apple','b':'banana'}
y = pd.Series(x)
print(y)
输出:
其中字典中的 key 值为索引,value 值为数据。
利用索引取字典中的部分数据创建 Series:
x = {'a':'apple','b':'banana','c':'cat','d':'dog'}
y = pd.Series(x,index=['a','c'],name='MySeries')
print(y)
输出:
三、Pandas 数据结构之 DataFrame:
DataFrame 是一种表格型的数据结构,类似于二维数组,其组成方式如下:
索引 | 列1 | 列2 | ... | 列n |
---|---|---|---|---|
... |
其中每列都是一个 Series 数据,它们的每行都共用一个索引值。
pd.DataFrame( data, index, columns, dtype, copy)
参数 | 描述 |
---|---|
index | 行标签(索引值) |
columns | 列标签,默认为 0,... ,n |
实例:
利用二维列表创建 DataFrame:
x = [['apple','fruit'],['cat','animal']]
y = pd.DataFrame(x,index=['a','c'],columns=['name','type'])
print(y)
输出:
利用字典创建 DataFrame:
x = {'name':['apple','cat'],'type':['fruit','animal']}
y = pd.DataFrame(x,index=['a','c'])
print(y)
或:
x = [{'name':'apple','type':'fruit'},{'name':'cat','type':'animal'}]
y = pd.DataFrame(x,index=['a','c'])
print(y)
输出同上
利用 loc 指令获取 DataFrame 中的某行:
x = [{'name':'apple','type':'fruit'},{'name':'cat','type':'animal'}]
y = pd.DataFrame(x,index=['a','c'])
print(y.loc['a'])
输出:
返回的数据类型为 Series
利用 loc 指令获取DataFrame 中的某几行:
x = [{'name':'apple','type':'fruit'},{'name':'cat','type':'animal'}]
y = pd.DataFrame(x,index=['a','c'])
print(y.loc[['a','c']])
输出:
返回的数据类型为 DataFrame
四、Pandas 处理 CSV 文件:
文件操作:
打开并读取 csv 文件:
pd.read_csv('<filename>.csv')
将 DataFrame 数据保存为 csv 文件:
<DataFrame>.to_csv('<filename>.csv')
数据处理:
读取 csv 文件数据(从前):
<DataFrame>.hand(n)
读取 csv 文件前面 n 行的数据
读取 csv 文件数据(从后):
<DataFrame>.tail(n)
读取 csv 文件后面的 n 行数据
获取 csv 文件信息:
<DataFrame>.info()
x = {'name':['apple','cat'],'type':['fruit','animal']}
y = pd.DataFrame(x,index=['a','b'])
print(y)
y.info()
输出:
详解(此处解释 .info() 的输出):
<class 'pandas.core.frame.DataFrame'>:数据类型为 DataFrame
Index: 2 entries:数据总共有两行
a to b:第一行数据编号为 a,最后一行数据编号为 b
Data columns (total 2 columns):数据总共有两列
#:列编号
Column:列名
Non-Null Count:非空数据数
Dtype:列类型
dtypes:每种类型的列有几个
数据整理:
判断空值:
<DataFarme>.isnull()
Pandas 认为:NaN、nan、NA、n/a 均为空值
而 NAN、nAn 等均不为空值
清洗空值:
<DataFrame>.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
参数 | 描述 |
---|---|
axis | 0(默认):逢空值删除整行 |
1:缝空值删除整列 | |
how | 'any':一行(列)中有一个元素为空值则删 |
'all':一行(列)中全为空值则删除 | |
thresh | 至少有 n 个非空数据才不会被删除 |
subset | 检查空值的范围,按行删填列名,按列删填行名 |
inplace | False(默认):原值不变,返回值为清洗后数据 |
True:原值为清洗后数据,返回值为 None |
有时我们不需要的数据并不一定是”空的“,也有可能是一些符号,我们可以对其进行如下处理(以不需要的数据为’--‘为例):
x=pd.read_csv('<filename>.csv',na_values='--')
即在读取 csv 文件时添加一个参数 na_values 来增加我们认定的空值。
替换空值:
<DataFrame>.fillna( data, inplace = False)
使用数据 data 来替换空值。
数学函数方法:
均值:mean()
中位数:median()
众数:mode()
统一日期格式错误数据:
x = {"Date": ['2004.07.20', '2004/07/20' , '20040720','2004-07-20']}
y = pd.DataFrame(x)
y['Date'] = pd.to_datetime(x['Date'])
print(y)
输出:
可以将规则的日期格式统一
替换错误数据:
<DataFrame>.loc( index, 'column')
x = {'Name':['Yu','Zhang','Li'],'Age':['18','50','130']}
y = pd.DataFrame(x)
print(y)
y.loc[2,'Age']='100'
print(y)
输出:
还可以利用循环语句批量替换数据:
for i in y.index:
if int(y.loc[i,'Age'])>100:
y.loc[i,'Age']='100'
print(y)
输出同上
删除数据:
x = {'Name':['Yu','Zhang','Li'],'Age':['18','50','130']}
y = pd.DataFrame(x)
for i in y.index:
if int(y.loc[i,'Age'])>100:
y.drop(i,inplace=True)
print(y)
输出:
查看与删除重复数据:
x = {'Name':['Yu','Zhang','Yu'],'Age':['18','50','18']}
y = pd.DataFrame(x)
print(y.duplicated())
y.drop_duplicates(inplace=True)
print(y)
输出: