Pandas基础笔记

jupyter创建虚拟环境

在cmd环境下创建虚拟环境命令:

conda env list -n env_name python=3.7(版本可任意指定,env_name为自己命名,如my_py) 

或者这样写 conda create --name my_py python=3.7

查看当前拥有的虚拟环境 conda env list

删除虚拟环境 conda remove -n my_py --all

进入虚拟环境 conda activate my_py

退出虚拟环境 conda deactivate

让虚拟环境自动关联notebook,安装命令 conda install nb_conda

指定下载镜像 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts

1.DataFrame

创建df = pd.DataFrame(array)

查看类型 type(df)

查看数据类型 df.dtype(s)

返回ndarray类型的对象 df.values (ndarray 的值类型都是统一的)

获取行索引 df.index

获取列索引 df.columns

查看一列有多少种值 df.age.unique()

设置性别列为行索引 df.set_index('性别')

获取行及列索引 df.axes

数据预览 df. info()

查看数据按列的统计信息 df.describe()

显示前 i 行数据 df.head(i)

显示后 i 行数据 df.tail(i)

查看大小 df.size

输出行数 df.shape[0]

输出列数 df.shape[1]

输出行列 df.shape

求极值 df.max() df.min()

求均值 df.mean()

求总和 df.sum()

计算标准差 df.std()

求出现次数 df.age.value_counts().head()

累加求和 df.cumsum(0) 也可写成np.cumsum(df,0) (其中的传入参数0表示axis=0,即按照行累加)

修改列索引 df.columns=['name','age','sex','height']

使用rename函数修改列索引 df.rename(columns={'姓名':'name', '年龄':'age', '性别':'sex'},inplace=True)

替换一列值 df.sex.replace('female','男',inplace=True)  df.sex.replace('male','女',inplace=True)

还可以使用map函数替换 df.sex = df['sex'].map({'男':'female','女':'male'})

排序 df.sort_values(['age','height'],ascending=[True,False])(ascending=True默认,False表示降序。ascending=[True,False]先升序后降序,若都降序写一个即可)

增加一列 df['列名'] = 1 (赋值为1)

删除一列 del df['列名']

删除一行 df.drop(labels=0) (labels 是行列的名字,默认axis=0删除行,为1则删除列)

最值的索引位置 df.idxmax()

给空值赋值零 df.fillna(0)

2.DataFrame 与 Series

Series创建 s1 = pd.Series([1,2,3,4])

查看类型 type(s1)

转dataframe类型 s1.to_frame()

转置 s1.to_frame().T(行与列对调)

dataframe series区别dataframe里的一维数组为series类型

3.pandas读取文件

pd.read_csv(filepath, header = 0) 从文件第0行读起(文件行数从0开始计数)

pd.read_csv(filepath,skiprows=[1,2]) 从文件第0行读起,跳过文件第1第2行

pd.read_csv(filepath, skiprows=lambda x : x%2 == 0) 跳过取余2等于0的行

pd.read_csv(filepath, header=2, skiprows = 2) 从第四行开始读起

pd.read_csv(filepath,keep_default_na=False) 保持数据原样输出(默认为True,会使无数据的输出为NaN)

4.pandas的索引

选取行

(1)位置索引,获取第2 行 df.loc[2]

(2)列表索引,获取0,1,2行 df.loc[[0,1,2]]

(3)切片索引 df.loc[0:4]

(4)布尔索引 df['年龄']>30 (返回的是索引列+年龄列的布尔值)

df.loc[df['年龄']>30] (返回筛选后的整表,与df[df['年龄']>30] 效果相同)

**iloc 和 loc 的区别**

(1) loc 是基于索引值的,切片是左闭右闭的

(2) iloc 是基于位置的,切片是左闭右开的

选取列

df[['年龄','城市']].head()

选取行列

df.loc[[0,3],['年龄','性别']]

df.loc[df['年龄']>18,:]

df.loc[0:5,'年龄']  取年龄列的前0-5个值(索引值不存在0:5时)

一些索引语句

as_index=True默认,False表示不展示索引项

inplace=False(默认)表示原数组不变,对数据进行修改之后结果给新的数组。

inplace=True表示直接在原数组上对数据进行修改。

reset_index用来重置索引,因为有时候对dataframe做处理后索引可能是乱的。

drop=True就是把原来的索引index列去掉,重置index。

drop=False就是保留原来的索引,添加重置的index。两者的区别就是有没有把原来的index去掉。

5.数据关联

拼接 pd.concat([left,right],ignore_index=True) (ignore_index=True 重置index, 为False保留之前的index,默认False)

pd.concat([left,right],axis=1) (asix 为0是为上下合并(有相同的列),为1时为横向的合并(有相同的行))

内连接(默认) result = pd.merge(left,right,on=['key1', 'key2'])

外连接 pd.merge(left, right, how='outer', on=['key1', 'key2'])

左连接 result = pd.merge(left, right, how='left', on=['key1', 'key2'])

右连接 pd.merge(left, right, how='right', on=['key1', 'key2'])

列名不一如何关联(内连接)  pd.merge(left,right,left_on = ['key1','key2'],right_on = ['key3','key4'])

通过索引关联(外连接)  pd.merge(left,right,left_index=True,right_index=True)

6.分组操作

groups = df.groupby('district') 地区聚合

groups.groups 索引列所在行的集合

len(groups)

for name,group in groups:

    print(name) 打印地区名

groups.agg([np.mean,np.sum,np.std]) 每一列都求多个聚合函数

groups.age.agg([np.mean,np.sum,np.std]) 针对具体列聚合

groups.agg({"age":np.mean,"novip_buy_times":np.sum}) 不同列不同聚合函数

7.转换过滤

transform函数 

s_score = lambda s : (s-s.mean())/s.std()

groups = df.groupby("district")

groups[['age','novip_buy_times','novip_buy_moneys']].transform(s_score)

分组过滤

df2 = groups.filter(lambda g : g['vip_buy_moneys'].mean() >= 2000)

df3.round({'A':1,'C':2}) (round(列名,小数点位数)默认保存整数)

8.pandas连接mysql

import pandas as pd

import numpy as np

import pymysql

pymysql.install_as_MySQLdb()

from sqlalchemy import create_engine

engine = sqlalchemy.create_engine('mysql://用户名:登陆密码@主机地址:端口号/数据库?charset=gbk',echo=False)

sql='select * from stu'

df = pd.read_sql(sql,engine)

从mysql读取数据:

df1 = pd.DataFrame({'name':['zhangsan','wagnwu','zhaoliu'],

                  'age':[18,19,17]})

写入数据到mysql:

df1.to_sql('stu',engine,index=False,if_exists='append')

9.numpy.ndarray

构造一个 ndarray:

matrix = np.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])

快速创建 一个三行四列的ndarray且填充指定值1:np.full([3,4],1)

填充0值:np.zeros ((3,4))

填充1值:np.ones( (2,3,4)) (二维三行四列数组)

使用 arange 生成序列:np.arange( 10, 30, 5 ) (起始为10,5为步长,30为结尾取不到)

np.arange(12).reshape(4,3) (四行三列,从0到11)

随机矩阵:np.random.random((2,3)) (得到一个2行3列的矩阵,默认会产生 -1 到 +1 的随机值)

平均分配:

from numpy import pi

np.linspace( 0, 2*pi, 100 ) (0到2*pi平均分成100等份)

进行其他操作:np.sin(np.linspace( 0, 2*pi, 100 ))

10.numpy的切片和索引

直接索引 matrix[1,4]  matrix[[0,1],[2,3]](0行开始计数)

使用切片 data[0:3,[0,1]] (切片左闭右开)

bool 索引 matrix==10

多个条件判断 res = (matrix == 10) | (matrix == 20) (输出bool值)

vector[res] (输出筛选后的ndarray)

11.数据可视化

plt.subplot(221)表示将整个图像窗口分为2行2列, 当前位置为1.

plt.subplot(223)表示将整个图像窗口分为2行2列, 当前位置为3(第二行第一列).

第一个参数代表子图的行数;第二个参数代表该行图像的列数; 第三个参数代表每行的第几个图像。





























最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341