个人知识管理站

分享个人生活、工作、学习过程中各种所学、所见、所闻,有趣的、好玩的、技术积累等各方面的内容。

您尚未登录。

公告

不积跬步无以至千里,不积小流无以成江海,网址:www.itecfun.com

#1 2018-05-10 17:58:03

xuyg
管理员
注册时间: 2015-01-21
帖子: 667

Python入门:Numpy 和 Pandas 基本语法

import numpy as np
import pandas as pd



#1、array

list_1 = [1,2,3,4]
array_1 = numpy.array(list_1) # 一维数组


list_2 = [4,5,6,7]
array_2 = numpy.array([list_1,list_2]) # 二维数组1 array_2.shape # 查看数组特征,eg:2行4列


#print(array_2.size) # 查看元素个数, eg:8

#print(array_2.dtype) # 查看数组类型,eg:int64


zeros = numpy.zeros(6) # 全0矩阵,s可以为一个数也可以为一个列表,eg:[2,3]表示2*3的二维数组
#print(zeros)

eye = numpy.eye(9) # 单位矩阵,生成的是浮点数
#print(eye)


#2、数组与矩阵运算

#~~数组array

numpy.random.randn(10) # 十个元素的一维数组

numpy.random.randint(10,size=20).reshape(4,5) # 产生20个10以内的随机整数,后面的reshape是将这些数重新写成一个4*5的二维数组

numpy.unique(array_1) # 找到里面所有的数但不重复

#sum:二维数组中对每一列求和
sum(array_2)

sum(array_2[0]) # 对第一行求和

sum(array_2[:,0]) #对第一列求和

array_2.max() #求最大值,对某行某列求则同sum

#~~矩阵matric

numpy.mat(([1,2,3],[4,5,6])) # 生成一个二维矩阵

numpy.mat(array_1) # 将数组转换成矩阵


#3、input和output:

import numpy as np

f = open('x.pkl','wb')

#序列化到硬盘

#pickle

import pickle
x = 'D:\\x.pke'
pickle.dump(x,f) # 产生pkl文件

f.close()


f = open('x.pkl','rb')

pickle.load(f) # 提取pkl文件

#numpy本身的工具

numpy.save('one_array',x)

numpy.load('one_array.npy')

numpy.savez('two_array.npz',a=1,b=2) # 对多个进行操作,进行压缩储存

c = numpy.load('two_array.npz') # 提取文件

c['a'] #第一个文件

c['b'] #第二个文件

#二、pandas

#1、Series

import numpy as np

import pandas as pd

#下面是创建Series的三种方法

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

s2 = pd.Series(np.arange(10)) # 通过numpy.arange创建

s3 = pd.Series({'1':1,'2':2,'3':3}) # 通过字典创建

s1.values # 查看值

s1.index # 查看索引

s4 = pd.Series([1,2,3,4],index=['A','B','C','D']) # 设置索引

s4.to_dict() # 转化成字典

pd.isnull(s4) #判断其中元素是否为NaN,pd.notnull()同理

#2、DataFrame

from pandas import Series,DataFrame

#通过粘贴板导入dataframe

df = pd.read_clipboard() # 在此之前需要你copy一个表

df.columns # 输出列名

#df.'列名' # 输出列的数值(是一个Series)

#df_new = DataFrame(df,columns=['列名1','列名2'])

#s1 = pd.Series(df['列名']) # 输出这一列,dataframe的每一列是一个series

#s1.index\values 即对series操作,或者通过s1['索引值']

#df1.iterrows() #返回一个生成器,可以用for循环来访问

#eg: for row in df1.iterrows():

    #print(row) #返回的数据为一个tuple

#s1,s2,s3为3个Series,用其组成一个人dataframe:

df_new = pd.DataFrame([s1,s2,s3],index=['A','B','C']) # index是每个Series的名称

# 初始是按横向拼接成的dataframe

df1 = df_new.T #转置,转置之后就和直接用dataframe生成的一样了
print('df1: \n',df1)


#三、IO操作:

#1、从粘贴板读取

df1 = pd.read_clipboard()

df1.to_clipboard() # 写入粘贴板

#2、CSV文件

df1.to_csv('名字.csv',index=False) # false则表示不添加索引号

df2 = pd.read_csv('df1.csv') # 读取CSV文件

#3、json

df1.to_json() # 转化成json文件

pd.read_json(df1.to_json()) # 读取json文件

#4、html

df1.to_html('df1_html') # 转换成HTML文件

#5、excel

df1.to_excel('df1.xlsx') # 生成Excel文件

#四、Selecting and Indexing

df.head() # 返回前五行

df.tail() # 返回后五行

# 返回更多的内容则在括号中写出来,不写则默认为五行

df.iloc[:,:] #索引切片,定位,基于index,与索引名无关

df.loc[:,:] # 根据索引名来,label来过滤

Reindex:

~~series

s1.reindex(index=['A','B','C','D','E'],fill_value=10)

# fill_value 是指当重新写的index中有原来没有的,那么他本身输出为NaN,fill值为添加到这个索引下的值

# 创建一个新Series,另一种赋值的方法

s2 = Series(['A','B','C','D'],index=[1,5,10])

s2.reindex(index=range(15)) # 生成15个索引的Series,除了原有的其他的都是NaN

s2.reindex(index=range(15),method='ffill') # 在上一步的基础上,按顺序将上一个value填充到他下面的几个中(forward fill)

s1.drop('A') # 表示删除A的内容

~~dataframe

# 创建一个5*5的,通过numpy进行reshape

df1 = DataFrame(np.random.rand(25).reshape([5,5]),index=['A','B','D','E','F'],colums=['c1','c2','c3','c4','c5']) # 遗漏的index中的C,通过reindex来恢复

df1.reindex(index=['A','B','C','D','E','F']) # C被恢复并把value填充为NaN

# columns 同理

# 当index减少时就表现出切割的现象

df1.drop('A',axis=0) # axis=0,代表删除行;axis=1,代表删除列(后面遇到axis同样是这个意思)

#五、NaN

n = np.nan

type(n) #是个浮点数float

#与nan的运算结果均是nan

nan in series:

#s1.isnull\notnull() #判断是否为nan

s1.dropna() # 删除掉value为NaN的行

nan in dataframe:

#判断同series

df.dropna(axis=0,how='any',thresh=None) # axis表示行和列0,1来表示,how为any时表示有Nan就删掉,为all时表示全为nan时才删掉;thresh表示一个界限,超过这个数字的nan则被删掉

df.fillna(value=1) # 表示所有为nan的地方填充为1

df.fillna(value={0:0,1:1,2:2,3:3}) # 表示第一列的填充1,第二列的填充2,后面同理

#注:dropna,fillna不改变原始数组

#六、多级index

index=[['1','1','1','2','2','2'],['a','b','c','a','b','c']] # 1,2为一级标题,abc为二级标题,即1的series下有abc,原始series下有1,2;获取内容时,可以s1['1']['a']

s1[:,'a'] #返回所有一级series里的a

#与dataframe的转换:

df1 = s1.unstack()

#逆转换:

s2 = df1.unstack() # 这时一二级换了位置

s2 = df1.T.unstack() # 这时是和原始完全一样的

#注:dataframe的index和columns都可以转换成多级的

#七、mapping and replace

#当想在一个dataframe中加一列(columns),可以直接加df['列名']=Series([数据])

#也可以通过map:创建一个字典,字典中的键是dataframe中的columns:

#df1['新列名'] = df1['字典中的键那一列'].map(那个字典) 这个可以固定对应位置,方便改值,可以指定index来改值

replace in series:

s1.replace({1,np.nan}) # 通过字典来改值

s1.replace([1,2,3],[10,20,30]) # 把123索引改成10,20,30

离线

#2 2018-05-10 17:58:58

xuyg
管理员
注册时间: 2015-01-21
帖子: 667

Re: Python入门:Numpy 和 Pandas 基本语法

df = pd.read_clipboard()

df.to_excel('D:\\dataframe_excel.xls',index=True)  #export to excel file

#写入excel文件需要安装 xlwt 模块 pip install xlwt
import xlwt
ModuleNotFoundError: No module named 'xlwt'

dfexcel = pd.read_excel('D:\\dataframe_excel.xls')

#读取excel文件需要安装 xlrd 模块 pip install xlrd
import xlrd
ModuleNotFoundError: No module named 'xlrd'

离线

页脚

©2019 YG Wang 备案号: 赣ICP备19010196号-1