<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://itecfun.com/extern.php?action=feed&amp;tid=3343&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[个人知识管理站 / Python入门：Numpy 和 Pandas 基本语法]]></title>
		<link>http://www.itecfun.com/viewtopic.php?id=3343</link>
		<description><![CDATA[Python入门：Numpy 和 Pandas 基本语法 最近发表的帖子。]]></description>
		<lastBuildDate>Thu, 10 May 2018 08:58:58 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[Re: Python入门：Numpy 和 Pandas 基本语法]]></title>
			<link>http://www.itecfun.com/viewtopic.php?pid=3598#p3598</link>
			<description><![CDATA[<p>df = pd.read_clipboard()</p><p>df.to_excel(&#039;D:\\dataframe_excel.xls&#039;,index=True)&#160; #export to excel file</p><p>#写入excel文件需要安装 xlwt 模块 pip install xlwt<br /> import xlwt<br />ModuleNotFoundError: No module named &#039;xlwt&#039;</p><p>dfexcel = pd.read_excel(&#039;D:\\dataframe_excel.xls&#039;)</p><p>#读取excel文件需要安装 xlrd 模块 pip install xlrd<br />import xlrd<br />ModuleNotFoundError: No module named &#039;xlrd&#039;</p>]]></description>
			<author><![CDATA[dummy@example.com (xuyg)]]></author>
			<pubDate>Thu, 10 May 2018 08:58:58 +0000</pubDate>
			<guid>http://www.itecfun.com/viewtopic.php?pid=3598#p3598</guid>
		</item>
		<item>
			<title><![CDATA[Python入门：Numpy 和 Pandas 基本语法]]></title>
			<link>http://www.itecfun.com/viewtopic.php?pid=3597#p3597</link>
			<description><![CDATA[<p>import numpy as np<br />import pandas as pd</p><br /><br /><p>#1、array</p><p>list_1 = [1,2,3,4]<br />array_1 = numpy.array(list_1) # 一维数组</p><br /><p>list_2 = [4,5,6,7]<br />array_2 = numpy.array([list_1,list_2]) # 二维数组1 array_2.shape # 查看数组特征，eg：2行4列</p><br /><p>#print(array_2.size) # 查看元素个数, eg:8</p><p>#print(array_2.dtype) # 查看数组类型，eg：int64</p><br /><p>zeros = numpy.zeros(6) # 全0矩阵，s可以为一个数也可以为一个列表，eg：[2,3]表示2*3的二维数组<br />#print(zeros)</p><p>eye = numpy.eye(9) # 单位矩阵，生成的是浮点数<br />#print(eye)</p><br /><p>#2、数组与矩阵运算</p><p>#~~数组array</p><p>numpy.random.randn(10) # 十个元素的一维数组</p><p>numpy.random.randint(10,size=20).reshape(4,5) # 产生20个10以内的随机整数，后面的reshape是将这些数重新写成一个4*5的二维数组</p><p>numpy.unique(array_1) # 找到里面所有的数但不重复</p><p>#sum:二维数组中对每一列求和<br />sum(array_2)</p><p>sum(array_2[0]) # 对第一行求和</p><p>sum(array_2[:,0]) #对第一列求和</p><p>array_2.max() #求最大值，对某行某列求则同sum</p><p>#~~矩阵matric</p><p>numpy.mat(([1,2,3],[4,5,6])) # 生成一个二维矩阵</p><p>numpy.mat(array_1) # 将数组转换成矩阵</p><br /><p>#3、input和output:</p><p>import numpy as np</p><p>f = open(&#039;x.pkl&#039;,&#039;wb&#039;)</p><p>#序列化到硬盘</p><p>#pickle</p><p>import pickle<br />x = &#039;D:\\x.pke&#039;<br />pickle.dump(x,f) # 产生pkl文件</p><p>f.close()</p><br /><p>f = open(&#039;x.pkl&#039;,&#039;rb&#039;)</p><p>pickle.load(f) # 提取pkl文件</p><p>#numpy本身的工具</p><p>numpy.save(&#039;one_array&#039;,x)</p><p>numpy.load(&#039;one_array.npy&#039;)</p><p>numpy.savez(&#039;two_array.npz&#039;,a=1,b=2) # 对多个进行操作，进行压缩储存</p><p>c = numpy.load(&#039;two_array.npz&#039;) # 提取文件</p><p>c[&#039;a&#039;] #第一个文件</p><p>c[&#039;b&#039;] #第二个文件</p><p>#二、pandas</p><p>#1、Series</p><p>import numpy as np</p><p>import pandas as pd</p><p>#下面是创建Series的三种方法</p><p>s1 = pd.Series([1,2,3,4])</p><p>s2 = pd.Series(np.arange(10)) # 通过numpy.arange创建</p><p>s3 = pd.Series({&#039;1&#039;:1,&#039;2&#039;:2,&#039;3&#039;:3}) # 通过字典创建</p><p>s1.values # 查看值</p><p>s1.index # 查看索引</p><p>s4 = pd.Series([1,2,3,4],index=[&#039;A&#039;,&#039;B&#039;,&#039;C&#039;,&#039;D&#039;]) # 设置索引</p><p>s4.to_dict() # 转化成字典</p><p>pd.isnull(s4) #判断其中元素是否为NaN，pd.notnull()同理</p><p>#2、DataFrame</p><p>from pandas import Series,DataFrame</p><p>#通过粘贴板导入dataframe</p><p>df = pd.read_clipboard() # 在此之前需要你copy一个表</p><p>df.columns # 输出列名</p><p>#df.&#039;列名&#039; # 输出列的数值(是一个Series)</p><p>#df_new = DataFrame(df,columns=[&#039;列名1&#039;,&#039;列名2&#039;])</p><p>#s1 = pd.Series(df[&#039;列名&#039;]) # 输出这一列，dataframe的每一列是一个series</p><p>#s1.index\values 即对series操作，或者通过s1[&#039;索引值&#039;]</p><p>#df1.iterrows() #返回一个生成器，可以用for循环来访问</p><p>#eg: for row in df1.iterrows():</p><p>&#160; &#160; #print(row) #返回的数据为一个tuple</p><p>#s1,s2,s3为3个Series，用其组成一个人dataframe：</p><p>df_new = pd.DataFrame([s1,s2,s3],index=[&#039;A&#039;,&#039;B&#039;,&#039;C&#039;]) # index是每个Series的名称</p><p># 初始是按横向拼接成的dataframe</p><p>df1 = df_new.T #转置，转置之后就和直接用dataframe生成的一样了<br />print(&#039;df1: \n&#039;,df1)</p><br /><p>#三、IO操作：</p><p>#1、从粘贴板读取</p><p>df1 = pd.read_clipboard()</p><p>df1.to_clipboard() # 写入粘贴板</p><p>#2、CSV文件</p><p>df1.to_csv(&#039;名字.csv&#039;,index=False) # false则表示不添加索引号</p><p>df2 = pd.read_csv(&#039;df1.csv&#039;) # 读取CSV文件</p><p>#3、json</p><p>df1.to_json() # 转化成json文件</p><p>pd.read_json(df1.to_json()) # 读取json文件</p><p>#4、html</p><p>df1.to_html(&#039;df1_html&#039;) # 转换成HTML文件</p><p>#5、excel</p><p>df1.to_excel(&#039;df1.xlsx&#039;) # 生成Excel文件</p><p>#四、Selecting and Indexing</p><p>df.head() # 返回前五行</p><p>df.tail() # 返回后五行</p><p># 返回更多的内容则在括号中写出来，不写则默认为五行</p><p>df.iloc[:,:] #索引切片，定位，基于index，与索引名无关</p><p>df.loc[:,:] # 根据索引名来，label来过滤</p><p>Reindex:</p><p>~~series</p><p>s1.reindex(index=[&#039;A&#039;,&#039;B&#039;,&#039;C&#039;,&#039;D&#039;,&#039;E&#039;],fill_value=10)</p><p># fill_value 是指当重新写的index中有原来没有的，那么他本身输出为NaN，fill值为添加到这个索引下的值</p><p># 创建一个新Series，另一种赋值的方法</p><p>s2 = Series([&#039;A&#039;,&#039;B&#039;,&#039;C&#039;,&#039;D&#039;],index=[1,5,10])</p><p>s2.reindex(index=range(15)) # 生成15个索引的Series，除了原有的其他的都是NaN</p><p>s2.reindex(index=range(15)，method=&#039;ffill&#039;) # 在上一步的基础上，按顺序将上一个value填充到他下面的几个中（forward fill）</p><p>s1.drop(&#039;A&#039;) # 表示删除A的内容</p><p>~~dataframe</p><p># 创建一个5*5的，通过numpy进行reshape</p><p>df1 = DataFrame(np.random.rand(25).reshape([5,5]),index=[&#039;A&#039;,&#039;B&#039;,&#039;D&#039;,&#039;E&#039;,&#039;F&#039;],colums=[&#039;c1&#039;,&#039;c2&#039;,&#039;c3&#039;,&#039;c4&#039;,&#039;c5&#039;]) # 遗漏的index中的C，通过reindex来恢复</p><p>df1.reindex(index=[&#039;A&#039;,&#039;B&#039;,&#039;C&#039;,&#039;D&#039;,&#039;E&#039;,&#039;F&#039;]) # C被恢复并把value填充为NaN</p><p># columns 同理</p><p># 当index减少时就表现出切割的现象</p><p>df1.drop(&#039;A&#039;,axis=0) # axis=0，代表删除行；axis=1，代表删除列（后面遇到axis同样是这个意思）</p><p>#五、NaN</p><p>n = np.nan</p><p>type(n) #是个浮点数float</p><p>#与nan的运算结果均是nan</p><p>nan in series：</p><p>#s1.isnull\notnull() #判断是否为nan</p><p>s1.dropna() # 删除掉value为NaN的行</p><p>nan in dataframe：</p><p>#判断同series</p><p>df.dropna(axis=0,how=&#039;any&#039;，thresh=None) # axis表示行和列0,1来表示,how为any时表示有Nan就删掉，为all时表示全为nan时才删掉；thresh表示一个界限，超过这个数字的nan则被删掉</p><p>df.fillna(value=1) # 表示所有为nan的地方填充为1</p><p>df.fillna(value={0:0,1:1,2:2,3:3}) # 表示第一列的填充1，第二列的填充2，后面同理</p><p>#注：dropna,fillna不改变原始数组</p><p>#六、多级index</p><p>index=[[&#039;1&#039;,&#039;1&#039;,&#039;1&#039;,&#039;2&#039;,&#039;2&#039;,&#039;2&#039;],[&#039;a&#039;,&#039;b&#039;,&#039;c&#039;,&#039;a&#039;,&#039;b&#039;,&#039;c&#039;]] # 1,2为一级标题，abc为二级标题，即1的series下有abc，原始series下有1,2；获取内容时，可以s1[&#039;1&#039;][&#039;a&#039;]</p><p>s1[:,&#039;a&#039;] #返回所有一级series里的a</p><p>#与dataframe的转换：</p><p>df1 = s1.unstack()</p><p>#逆转换：</p><p>s2 = df1.unstack() # 这时一二级换了位置</p><p>s2 = df1.T.unstack() # 这时是和原始完全一样的</p><p>#注：dataframe的index和columns都可以转换成多级的</p><p>#七、mapping and replace</p><p>#当想在一个dataframe中加一列(columns)，可以直接加df[&#039;列名&#039;]=Series([数据])</p><p>#也可以通过map：创建一个字典，字典中的键是dataframe中的columns：</p><p>#df1[&#039;新列名&#039;] = df1[&#039;字典中的键那一列&#039;].map(那个字典) 这个可以固定对应位置，方便改值，可以指定index来改值</p><p>replace in series:</p><p>s1.replace({1,np.nan}) # 通过字典来改值</p><p>s1.replace([1,2,3],[10,20,30]) # 把123索引改成10,20,30</p>]]></description>
			<author><![CDATA[dummy@example.com (xuyg)]]></author>
			<pubDate>Thu, 10 May 2018 08:58:03 +0000</pubDate>
			<guid>http://www.itecfun.com/viewtopic.php?pid=3597#p3597</guid>
		</item>
	</channel>
</rss>
