Numpy&Pandas视频笔记

数据处理入门

1 简介

C语言直接编写,在tensorflow等应用中更方便、快速。pandas是numpy的升级版

2 安装

3 基本属性

import numpy as np
array=np.array([[1,2,3]
                [2,5,8]],dtype=int)
print(array.ndim)
print(array.shape)
print(array.size)

4 创建数组array

import numpy as np
zero_array = np.zeros((3,4))#3行4列的零矩阵
one_array = np.ones((2,4),dtype=int)#每个元素都为1
np.empty((3,2))#每个元素几乎为0
range_array = np.arange(12).reshape((2,6))
#按顺序取0-12,并reshape为2行6列的矩阵
line_arr = np.linspace(0,10,5)#在指定的间隔内返回均匀间隔的数字,即返回0-10中的5个等间隔数字

5 基础运算

import numpy as np  
a = np.array([[10,20],
            [1,0,]])
b = np.arange(4).reshape(2,2)
c = a*b#逐个相乘
c_dot = np.dot(a,b)#矩阵乘法
print(c)
print(c_dot)

a = np.random.random((2,4))
print(a)
print(np.sum(a))
print(np.max(a,axis=1))#按行求最大值
print(np.min(a,axis=0))#按列求最大值

6 基础运算2

a = np.arange(14,2,-1).reshape((3,4))
print(a)
print(np.clip(a,5,9))
print(np.mean(a,axis=0))#对于列进行计算
print(np.mean(a,axis=1))#对于行进行计算

7 numpy索引

a = np.arange(3,15)
print('a',a)
print(a[3])
b = a.reshape((3,4))
print(b)
print(b[2][1])#第2行,第1列(索引从0开始)
print(b[:,2])#第2列,所有元素
print(b[0,:])#第0行,所有元素
print(b[0:2,0])#第0列,第0-2行的元素
#for循环
a = np.arange(3,15).reshape((3,4))
print(a)

print('row:')
for row in a:
    print(row)

print('column:')
for column in a.T:#转置矩阵
    print(column)
 
print('flat:')
print(a.flatten())
for item in a.flat:
    print(item)

8 numpay array合并

a = np.array([1,1,1])
b = np.array([2,2,2])

c = np.vstack((a,b))#vertical stack,上下合并
d = np.hstack((a,b))#horizontal stack,左右合并
print(c.shape,d.shape)
print(c)
print(d)

print(a[np.newaxis,:])#新增行维
print(a[:,np.newaxis])#新增列维

d = np.concatenate((a,b,b,a),axis=0)#多个array的横向合并
print(d)

9 array分割

a = np.arange(12).reshape((3,4))
print(a)

print(np.split(a,2,axis=1))#纵向平均分割为2个array
print(np.split(a,3,axis=0))#横向平均分割为3个array
print(np.array_split(a,3,axis=1))#纵向不等分割为3个array

10 numpy copy & deep copy

a = np.arange(4)
print(a)
b = a
c = a
d = a
a[0] = 11
print(a)
# a,b,c,d相互关联
print(b is a)
d[1:3] = [22,33]
print(c is a)

#不相互关联
b = a.copy()#deep copy
a[3] = 15
print(a is b)

11 pandas基本介绍

import pandas as pd
import numpy as np

s = pd.Series([1,3,6,np.nan,44,1])#可以显示索引的列表
print(s)
dates = pd.date_range('20180304',periods=6)#从20180304开始的6天时间数据
print(dates)

df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['a','b','c','d'])#dataframe相当于一个matrix矩阵,也就是numpy里面的二维矩阵。行索引为dates,列索引为中括号内所述内容
print(df)
df1 = pd.DataFrame(np.arange(12).reshape((3,4)))
print(df1)
df2 = pd.DataFrame({'A':1,
                   'B':pd.Series(1,index=list(range(4)),dtype='float32'),
                   'C':pd.Timestamp('20180102'),
                   'D':np.array([3]*4,dtype='int32'),
                   'E':pd.Categorical(['test','train','test','train']),
                   'F':'foo'})
print(df2)
print(df2.dtypes)#输出类型
print(df2.index)#输出索引
print(df2.columns)#输出列名
print(df2.values)
print(df2.describe())#输出描述
print(df2.T)#矩阵转置
print(df2.sort_index(axis=1,ascending=False))#按行排序,降序
print(df2.sort_values(by='E'))#按E列中的值排序

12 pandas选择数据

dates = pd.date_range('20180308',periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['a','b','c','d'])
print(df[0:3],df['20180309':'20180311'])#选择列
print(df['a'],df.a)#选择行
print(df.loc['20180309'])#按横向标签选择
print(df.loc[:,['b','c']])#按列标签选择
print(df.iloc[3:5,1:3])#按位置选择
# print(df.ix[:3,['a','d']])#标签、位置混合选择,已弃用
print(df[df.a>8])

13 pandas设置值

df.iloc[2,2]=1111
df.loc['20180309','a'] = 2222
df.b[df.a>8] = 0

14 如何处理丢失数据

dates = pd.date_range('20180308',periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['a','b','c','d'])
df.iloc[0,1] = np.nan
df.iloc[1,2] = np.nan
print(df.dropna(axis=0,how='any'))#丢掉nan数据,how=['any','all'],当how=all时,该行全部为nan时才启用
print(df.fillna(value=0))#将nan填为0
print(df.isnull)#是否缺失数据
print(np.any(df.isnull()==True))#至少有一个为nan

15 导入导出数据

data = pd.read_csv('filepath')#导入
data.to_pickle('filepath')#导出

16 合并concatenating

df1 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])
df2 = pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])
df3 = pd.DataFrame(np.ones((3,4))*2,columns=['a','b','c','d'])

# print(df1)
# print(df2)
# print(df3)

# result = pd.concat([df1,df2,df3],axis=0,ignore_index=True)#axis=0为纵向合并
# print(result)

#join,['inner','outer']
df4 = pd.DataFrame(np.ones((3,4))*1,columns=['c','d','e','f'])
df5 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])
res = pd.concat([df4,df5],axis=0,join='inner',ignore_index=True)#默认为outer join
print(res)

#join axes
res2 = pd.concat([df4,df5],axis=1,join_axes=[df4.index])#横向合并,以df4的索引为准
print(res2)

#append
res3 = df1.append(df2,ignore_index=True)
print(res3)

s1= pd.Series([1,2,3,4],index=['a','b','c','d'])
res4 = df1.append(s1,ignore_index=True)
print(res4)

17 合并merge

#两组dataframe依据key合并
left = pd.DataFrame({'key':['k0','k1','k2','k3'],
                    'A':['b0','b1','b2','b3'],
                    'B':['a0','a1','a2','a3']})
right = pd.DataFrame({'key':['k0','k1','k2','k3'],
                     'C':['c0','c1','c2','c3'],
                     'D':['d0','d1','d2','d3']})
res = pd.merge(left,right,on='key')
# print(res)

#依据两组keys合并
left2 = pd.DataFrame({'key1':['k0','k0','k1','k2'],
                      'key2':['k0','k1','k0','k1'],
                    'A':['b0','b1','b2','b3'],
                    'B':['a0','a1','a2','a3']})
right2 = pd.DataFrame({'key1':['k0','k0','k1','k2'],
                       'key2':['k0','k0','k0','k0'],
                     'C':['c0','c1','c2','c3'],
                     'D':['d0','d1','d2','d3']})
res2 = pd.merge(left2,right2,on=['key1','key2'],how='inner')
# print(res2)

#根据index横向合并
res3 = pd.merge(left2,right2,left_index=True,right_index=True,how='outer')
print(res3)

#当两个表中的某一列重名,但是值不同,合并的时候要保留,则使用suffixes参数
boys = pd.DataFrame({'k':['k0','k1','k2'],'age':[1,2,3]})
girls = pd.DataFrame({'k':['k0','k0','k3'],'age':[4,5,6]})

res4 = pd.merge(boys,girls,on='k',suffixes=['_boy','_girl'],how='inner')
print(res4)

18 plot图表

import matplotlib.pyplot as plt
#线性数据Series
data = pd.Series(np.random.randn(1000),index=np.arange(1000))
data = data.cumsum()#累加
# data.plot()
# plt.show()#显示
#矩阵数据DataFrame
data2 = pd.DataFrame(np.random.randn(1000,4),
                    index=np.arange(1000),
                    columns=list('ABCD'))
data2 = data2.cumsum()
print(data2.head())
# data2.plot()
ax = data2.plot.scatter(x='A',y='B',color='DarkBlue',label='Class1')
data2.plot.scatter(x='A',y='C',color='DarkGreen',label='Class2',ax=ax)
plt.show()#显示

#plot method:'bar','hist','box','kde','area','scatter','hexbin','pie'

感谢:

视频链接

莫烦PYTHON

Pandas速查手册中文版 - CSDN博客

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

推荐阅读更多精彩内容