python数据分析之Pandas库(一)

Pandas介绍

Pandas有两种常用的数据结构: Series (一维数据)与 DataFrame(二维数据)。
Series 是一种类似于一维数组的对象,能保存不同数据类型。
DataFrame 是一个二维的表格型的数据结构。

一、导入

import pandas as pd

二、Series

1、初始化

使用一位列表初始化Series

# 默认索引下标为数字
s=pd.Series([1,3,5,np.nan,6,7])

# 更改索引下标为指定字母
s1=pd.Series([1,3,5,np.nan,6,7],index=['a','b','c','d','x','y'])

2、索引[数据的行标签]、切片

s=pd.Series([1,3,5,np.nan,6,7])
# 索引
s.index

# 值
s.values

# 索引取值,下标为0的元素值
s[0]

# 切片,左闭右开,步长为2
s[1:5:2]

# 为索引取名
s.index.name='索引'

# 修改索引下标
s.index=list('abcdxy')

# 根据自定义的索引进行切片,非左闭右开
s['a':'c':2]

三、DataFrame

1、初始化

import numpy as np
df1 = pd.DataFrame(np.random.randn(6,4))  # 6行4列,默认行列标签均为数字下标

date=pd.date_range('20230908',periods=6)  # 构造行标签
df = pd.DataFrame(np.random.randn(6,4), index = date, columns = list("ABCD"))  # index指定行标签,columns指定列标签

# 使用字典传入数据
df2 = pd.DataFrame({
'A':1.,
'B':pd.Timestamp("20181001"),
'C':pd.Series(1,index = list(range(4)),dtype = float),
'D':np.array([3]*4, dtype = int),
'E':pd.Categorical(["test","train","test","train"]),
'F':"abc"}) #B:时间戳,E分类类型

2、查看数据

# 查看各列的数据类型
df2.dtypes

# 查看头尾数据
df.head()
df.tail(3)

# 查看行标签
df.index

# 查看列标签
df.columns

# 查看元素值
df.values

四、pandas读取数据即数据操作

python数据分析之Pandas库(一)_第1张图片

1、读入文件【以豆瓣电影为例】

# 读入excel文件
df=pd.read_excel(r"D:\desk\77\bbb\python\豆瓣电影数据.xlsx",index_col = 0)
# 读入CSV文件  pd.read_csv(r'路径')

2、行操作

访问

# 取第一行
df.iloc[0]
# 取前4行
df.iloc[:4]  #左闭右开

df.loc[:4]  #不是左闭右开

添加一行

dit = {"名字":"复仇者联盟3","投票人数":123456,"类型":"剧情/科幻","产地":"美国","上映时间":"2018-05-04 00:00:00","时长":142,"年代":2018,"评分":np.nan,"首映地点":"美国"}
s = pd.Series(dit)
s.name = 38738
df=df.append(s)  # 覆盖掉原来的数据重新进行赋值 

删除一行

df = df.drop([38738])

3、列操作

访问

# 取列标签
df.columns

# 取指定标签列
df['产地']
# 取多列,指定标签
df['名字','类型']
# 取定标签列的,前5行
df['名字'][:5]

添加一列

# 添加为‘序号’的1列,值为1到len(df)
df['序号']=range(1,len(df)+1)

删除一列

# 删除名为‘序号’的1列
df=df.drop('序号',axis=1)  # axis指定方向:0为行,1为列

通过标签选择数据
df.loc[index,column]

# 选择行标签为1,列标签为‘名字’的元素
df.loc[1,'名字']  

# 选择多行多列
df.loc[[1,3,5,7,9],['名字','评分']]

条件选择

选取产地为美国的所有电影

df[df['产地']=='美国']

选取产地为美国的所有电影,并且评分大于9分的电影

df[(df.产地=='美国')&(df.评分)>9]  # df.标签  等同于 df['标签']

选取产地为美国或中国大陆的所有电影,并且评分大于9分

df[((df.产地 == "美国") | (df.产地 == "中国大陆")) & (df.评分 > 9)]

五、缺失值及异常值处理

方法 说明
dropna 根据标签中的缺失值进行过滤,删除缺失值
fillna 对缺失值进行填充
isnull 判断哪些值是缺失值,返回布尔对象
notnull isnull的否定式

1、判断缺失值

df[df['名字'].isnull()]
df[df['名字'].notnull()]

2、填充缺失值

df[df['评分'].isnull()]
df['评分'].fillna(np.mean(df['评分']),inplace=True)  # 使用均值来进行填充,inplace意为直接在原始数据中进行修改

df1=df.fillna('未知电影')  # 将所有空值填充为‘未知电影’
df1[df1['名字'].isnull()  # 填充后所有元素均不空

3、删除缺失值

df.dropna() 参数
how = ‘all’:删除全为空值的行或列
inplace = True: 覆盖之前的数据
axis = 0: 选择行0或列1,默认是行

df2=df.dropna()  # 产生新对象
df.dripna(inplace=True)  # 直接在原对象上操作

4、处理异常值

异常值,即在数据集中存在不合理的值,又称离群点。比如年龄为-1,笔记本电脑重量为1吨等,都属于异常值的范围。

# 投票人数小于0的数或小数均为异常值,可直接删除或修正
df=df[df.投票人数>0]  # 大于0
df=df[df['投票人数']%1==0  # 整数

5、数据保存

数据处理之后,然后将数据重新保存到movie_data.xlsx

df.to_ecxel('movie_data.xlsx')

你可能感兴趣的:(python数据分析,python,数据分析,pandas)