Pandas有两种常用的数据结构: Series (一维数据)与 DataFrame(二维数据)。
Series 是一种类似于一维数组的对象,能保存不同数据类型。
DataFrame 是一个二维的表格型的数据结构。
import pandas as pd
使用一位列表初始化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'])
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]
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分类类型
# 查看各列的数据类型
df2.dtypes
# 查看头尾数据
df.head()
df.tail(3)
# 查看行标签
df.index
# 查看列标签
df.columns
# 查看元素值
df.values
# 读入excel文件
df=pd.read_excel(r"D:\desk\77\bbb\python\豆瓣电影数据.xlsx",index_col = 0)
# 读入CSV文件 pd.read_csv(r'路径')
访问
# 取第一行
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])
访问
# 取列标签
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的否定式 |
df[df['名字'].isnull()]
df[df['名字'].notnull()]
df[df['评分'].isnull()]
df['评分'].fillna(np.mean(df['评分']),inplace=True) # 使用均值来进行填充,inplace意为直接在原始数据中进行修改
df1=df.fillna('未知电影') # 将所有空值填充为‘未知电影’
df1[df1['名字'].isnull() # 填充后所有元素均不空
df.dropna() 参数
how = ‘all’:删除全为空值的行或列
inplace = True: 覆盖之前的数据
axis = 0: 选择行0或列1,默认是行
df2=df.dropna() # 产生新对象
df.dripna(inplace=True) # 直接在原对象上操作
异常值,即在数据集中存在不合理的值,又称离群点。比如年龄为-1,笔记本电脑重量为1吨等,都属于异常值的范围。
# 投票人数小于0的数或小数均为异常值,可直接删除或修正
df=df[df.投票人数>0] # 大于0
df=df[df['投票人数']%1==0 # 整数
数据处理之后,然后将数据重新保存到movie_data.xlsx
df.to_ecxel('movie_data.xlsx')