Python数据分析-Pandas

Pandas

个人笔迹,建议不看

py 复制代码
import pandas as pd
import numpy as np

Series类型

py 复制代码
s=pd.Series([1,3,5,np.nan,6,8],index=['a','b','c','d','e'])
print(s) # 默认0-n-1,否则用index数组作行标
s.index
s.value # array()
s['a'] => 1 # 取值 
s[0:3]		# 切片
s[::2] # 其实跟 array 类似,就是输出不一样
# 索引赋值
s.index.name = '索引'
s.index = list('abcdef');
s['a':'c']; # 切片左闭右闭

DataFrame类型

是一个二维结构,类似于一张excel表

py 复制代码
1)构造时间序列
date = pd.date_range('20180101',periods=6)
print(date)
2)创建一个DataFrame结构
## 传入二维数组
df = pd.DateFrame(np.random.randn(6,4))
df = pd.DateFrame(np.random.randn(6,4),index = date, columns=list('ABCD'))
## 用字典创建
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=float),'E':
pd.Categorical(['test','train','test','train']),'F':abc});

DateFrame只要求每列的数据类型相同就可以了

  • 查看数据
py 复制代码
df.head() # 默认产生前五行
df.tail(3) 
df2.dtypes # 查看各列的数据类型
## 下标用index属性查看
df.index
df.columns
df.values # 只看值
  • 读取数据及数据操作
py 复制代码
# 读取excel,同一目录下
df=pd.read_excel('name.xlsx')
df=pd.read_csv('name.csv')
df=pd.read_excel(r'C:\Users\Administrator\Desktop\name.xlsx') # r 代表不需要转义
  • 行操作
py 复制代码
# iloc的参数为具体的数字行列号,loc的参数为设置的index值和列名
df.iloc[0] 看第0行
df.iloc[0:5] # 左闭右开,df.loc[0:4].左闭右闭
## 添加一行
##先定义Series
dit={'名字':'复仇者联盟3','投票人数':123456,'类型':'剧情','产地':'美国',上映时间':'2018-05-04'}
s=pd.Series(dit)
s.name = 38737
df = df.append(s);
df[-5:];# 查看后5行
df[0:2]
## 删除行
df=df.drop([0,1,2])  # 给的是索引
## 查看
df['columnName'] # 显示名字这一列的所有信息
df['columnName'][:5]# 先取系列,后取下标
## 增加字段
df['newCol'] = range(1,len(df)+1)
## 删除列
df = df.drop('序号',axis=1) 
## 通过标签进行数据选择, 先行后列用loc
df.loc[[index],[column]]
df.loc['a','名字']
df.loc[[1,3,5,7,9],['名字','评分']]
  • 条件选择
py 复制代码
df['产地'] == '美国' # bool series
df[df['产地'] == '美国'][:5]
## 选取产地为美国并且评分大于9
df[(df.产地=='美国')&(df.评分>9)][:5]
## 产地为美国或中国并且评分大于9
df[((df.产地=='美国')|(df.产地=='中国'))&(df.评分>9)] # 其实是位运算,注意加括号
  • 缺失值及异常值处理
py 复制代码
dropna
fillna
isnull
notnull

判断缺失值:

py 复制代码
df.isnull()
返回二维bool数组
df['名字'].isnull()
df.col.notnull()
df[df.col.isnull][:5]

填充缺失值:

py 复制代码
fillna()	# NaN
df['评分'].fillna(value)

删除缺失值

py 复制代码
df.dropna() 
参数:
how = 'all' : 某行某列全为0时删除
inplace = true : 覆盖掉原先的数据,即直接变为新数据
axis=0:选择行或者列

练习

python 复制代码
import pandas as pd
data = pd.read_excel('豆瓣电影数据.xlsx')
print(type(data))
<class 'pandas.core.frame.DataFrame'>
python 复制代码
data.to_excel(r'C:/Users/xxx/desktop/movie.xlsx')
python 复制代码
df = pd.DataFrame({'name':['zs','ls'],'age':[1,2]})
df
df.describe()
#type(df)

| | age |
| count | 2.000000 |
| mean | 1.500000 |
| std | 0.707107 |
| min | 1.000000 |
| 25% | 1.250000 |
| 50% | 1.500000 |
| 75% | 1.750000 |

max 2.000000
python 复制代码
data.columns
Index(['Unnamed: 0', '名字', '投票人数', '类型', '产地', '上映时间', '时长', '年代', '评分',
       '首映地点'],
      dtype='object')
python 复制代码
df = pd.read_excel(r'C:/Users/xxx/desktop/附件.xlsx')
df.drop(['Unnamed: 15','Unnamed: 16'],axis = 1)
df.drop(df.columns[15:22],axis=1,inplace = True)
df.to_excel(r'C:/Users/xxx/desktop/test.xlsx')
df.fillna(df.mean())

| | 编号 | 母亲年龄 | 婚姻状况 | 教育程度 | 妊娠时间(周数) | 分娩方式 | CBTS | EPDS | HADS | 婴儿行为特征 | 婴儿性别 | 婴儿年龄(月) | 整晚睡眠时间(时:分:秒) | 睡醒次数 | 入睡方式 |
| 0 | 1 | 34 | 2 | 5 | 37.0 | 1 | 3 | 13 | 9 | 中等型 | 1 | 1 | 10:00:00 | 3.000000 | 2.000000 |
| 1 | 2 | 33 | 2 | 5 | 42.0 | 1 | 0 | 0 | 3 | 安静型 | 2 | 3 | 11:00:00 | 0.000000 | 4.000000 |
| 2 | 3 | 37 | 2 | 5 | 41.0 | 1 | 4 | 8 | 9 | 安静型 | 1 | 1 | 12:00:00 | 1.000000 | 2.000000 |
| 3 | 4 | 31 | 2 | 5 | 37.5 | 1 | 6 | 16 | 13 | 安静型 | 2 | 3 | 11:00:00 | 2.000000 | 1.000000 |
| 4 | 5 | 36 | 1 | 5 | 40.0 | 1 | 1 | 3 | 3 | 中等型 | 2 | 3 | 10:30:00 | 1.000000 | 4.000000 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 405 | 406 | 31 | 2 | 3 | 39.5 | 1 | 1 | 4 | 4 | NaN | 2 | 2 | NaN | 1.461538 | 3.025641 |
| 406 | 407 | 26 | 2 | 2 | 37.0 | 1 | 4 | 9 | 14 | NaN | 2 | 2 | NaN | 1.461538 | 3.025641 |
| 407 | 408 | 26 | 2 | 5 | 39.0 | 1 | 0 | 3 | 3 | NaN | 1 | 1 | NaN | 1.461538 | 3.025641 |
| 408 | 409 | 27 | 2 | 5 | 41.2 | 1 | 0 | 0 | 4 | NaN | 1 | 1 | NaN | 1.461538 | 3.025641 |

409 410 31 2 5 38.0 1 3 7 7 NaN 2 2 NaN 1.461538 3.025641

410 rows × 15 columns

python 复制代码
df[df.婴儿行为特征 == '安静型']

| | 编号 | 母亲年龄 | 婚姻状况 | 教育程度 | 妊娠时间(周数) | 分娩方式 | CBTS | EPDS | HADS | 婴儿行为特征 | 婴儿性别 | 婴儿年龄(月) | 整晚睡眠时间(时:分:秒) | 睡醒次数 | 入睡方式 |
| 1 | 2 | 33 | 2 | 5 | 42.0 | 1 | 0 | 0 | 3 | 安静型 | 2 | 3 | 11:00:00 | 0.0 | 4.0 |
| 2 | 3 | 37 | 2 | 5 | 41.0 | 1 | 4 | 8 | 9 | 安静型 | 1 | 1 | 12:00:00 | 1.0 | 2.0 |
| 3 | 4 | 31 | 2 | 5 | 37.5 | 1 | 6 | 16 | 13 | 安静型 | 2 | 3 | 11:00:00 | 2.0 | 1.0 |
| 5 | 6 | 32 | 2 | 5 | 41.0 | 1 | 1 | 2 | 3 | 安静型 | 1 | 1 | 12:00:00 | 0.0 | 4.0 |
| 9 | 10 | 34 | 1 | 3 | 37.2 | 1 | 3 | 5 | 10 | 安静型 | 1 | 3 | 11:00:00 | 0.0 | 4.0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 377 | 378 | 29 | 2 | 4 | 41.0 | 1 | 6 | 7 | 9 | 安静型 | 2 | 2 | 11:00:00 | 1.0 | 4.0 |
| 378 | 379 | 41 | 2 | 3 | 39.4 | 1 | 10 | 13 | 11 | 安静型 | 1 | 1 | 10:00:00 | 0.0 | 4.0 |
| 380 | 381 | 32 | 2 | 5 | 40.0 | 1 | 5 | 5 | 3 | 安静型 | 1 | 1 | 09:00:00 | 0.0 | 5.0 |
| 387 | 388 | 31 | 2 | 5 | 41.6 | 1 | 0 | 3 | 1 | 安静型 | 1 | 1 | 10:30:00 | 2.0 | 1.0 |

388 389 27 2 3 40.0 1 1 10 5 安静型 1 1 06:00:00 2.0 1.0

120 rows × 15 columns

python 复制代码
import numpy as np
python 复制代码
d = dict(A = np.array([1,2]),B =np.array([1,2,3,4]))
python 复制代码
df1 = pd.DataFrame({'name':['zs','ls'],'age':[1,2]})
df2 = pd.DataFrame({'mane':['ww','ll'],'sex':[0,1]})
pd.concat([df1,df2])

| | name | age | mane | sex |
| 0 | zs | 1.0 | NaN | NaN |
| 1 | ls | 2.0 | NaN | NaN |
| 0 | NaN | NaN | ww | 0.0 |

1 NaN NaN ll 1.0
python 复制代码
df1 = pd.DataFrame({'name':['zs','ls'],'age':[1,2]})
df2 = pd.DataFrame({'name':['ww','ll'],'age':[0,1]})
df3 = pd.concat([df1,df2])
df3['age+1'] =df3['age'] + 1
df3.dtypes
df3

| | name | age | age+1 |
| 0 | zs | 1 | 2 |
| 1 | ls | 2 | 3 |
| 0 | ww | 0 | 1 |

1 ll 1 2
python 复制代码
df2.size # 面积 4 * 3
df.shape
df.var()
# df.discribe()
df.std()
编号          118.501055
母亲年龄          4.362262
婚姻状况          0.359970
教育程度          1.001642
妊娠时间(周数)      1.900777
分娩方式          0.109890
CBTS          4.963365
EPDS          6.757595
HADS          4.259715
婴儿性别          0.500319
婴儿年龄(月)       0.821911
睡醒次数          1.612071
入睡方式          1.408516
dtype: float64
相关推荐
Kenneth風车17 分钟前
【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版
人工智能·算法·低代码·机器学习·数据分析
凌不了云20 分钟前
windows环境下安装python第三方包
开发语言·python
大熊程序猿20 分钟前
python 读取excel数据存储到mysql
数据库·python·mysql
生椰拿铁You23 分钟前
Python
python
鸽芷咕26 分钟前
【Python报错已解决】python setup.py bdist_wheel did not run successfully.
开发语言·python·机器学习·bug
知识分享小能手43 分钟前
mysql学习教程,从入门到精通,SQL DISTINCT 子句 (16)
大数据·开发语言·sql·学习·mysql·数据分析·数据库开发
清纯世纪1 小时前
基于深度学习的图像分类或识别系统(含全套项目+PyQt5界面)
开发语言·python·深度学习
孤华暗香1 小时前
Python快速入门 —— 第三节:类与对象
开发语言·python
didiplus1 小时前
【趣学Python算法100例】百钱百鸡
python·算法·百钱百鸡
pzx_0011 小时前
【内积】内积计算公式及物理意义
数据结构·python·opencv·算法·线性回归