pandas转化np数据_利⽤Python进⾏数据分析(语法篇)⼀、数据
结构化数据:
1.多维数组——矩阵
2.表格型数据(关系型数据库中的数据)
3.通过关键列相连接的表
4.间隔平均或者不平均的时间序列
⼆、关于iPython
三、Numpy学习
numpy是⾼性能科学计算和数据分析的基础包。它本⾝没有太多⾼级分析的功能,重点在于理解Numpy数组以及⾯向数组的计算
Numpy数组以及⾯向数组的计算。
1.Numpy.ndarray
ndarray中的元素必须都是相同类型,每个数组都有⼀个shape(⼀个表⽰各维度⼤⼩的元组,也就是⼏⾏⼏列)+⼀个dtype(说明数组类型的对象,数字啊还是字母什么的)
列表+np.array(列表) = 数组
嵌套列表(等长)+np.array(列表) = 多维数组
特殊的数组:s(x,y) 产⽣x⾏y列的全为0的数组
s(x,y)全为1
pty(x,y)产⽣x⾏y列的随机数的数组
np.arrange()range的数组版
ps:Numpy中的数组的dtype基本上是浮点数、复数、整数、布尔值....如果需要转换type的话,⽤np.array.astype()
2.数组与标量之间的运算
⼀维数组长得和列表差不多,很数组与标量之间的运算很简单,是每⼀个数组⾥⾯的元素都和标量运算
⼀遍,再返回到原有的索引位置。⼀维数组长得和列表差不多,
多功能也是很相似的。主要的区别在于:数组切⽚是原数组的视图,修改了元素之后,数据不会被赋值,⽽是直接反应到原数组上。(如果想要有副本,⽤copy()函数)
需要赋值就直接赋值即可,直接会被修改。
3.矩阵中的元素索引
在⼆维数组中,单⼀索引代表了是⼀维数组。要⽤元素的话索引得是[x][y[,表明寻求x⾏y列的那个元素。同理,⼀个索引降⼀维度,如果是n为数组,需要有[n][b][a]....[1],n个索引才能达到最后的单独的⼀个元素。
⾼阶维度的切⽚是沿着axis来切的。具体可以查阅别的blog.
4.bool型索引
numpy.random.randn()可⽣成随机数据
给出⼀个索引,满⾜索引条件的都会被打印出来。bool型索引可以和切⽚,整数序列混合使⽤。data[索引条件,切⽚](切⽚不写默认全data),有了这个⼀些数据或者调整⼀些数据就会变得很简单。
5.数组转置和轴对换
T属性(转置)np.arrange.T()
np.dot函数计算转置数组和原数组的内积
对于⾼维数组,需要得到转置的轴才能进⾏转置,⽤transpose⽅法。transpose进⾏的操作其实是将各个维度重置。
还有⼀种swapaxes⽅法:接受⼀对轴编号进⾏变换。
6.通⽤函数(nfunc)
nfunc是针对ndarray⾥元素数据执⾏的函数。算是⼀般函数的⽮量版。
有⼀元nfunc,针对⼀组数组。⼆元nfunc,针对⼆组数组。
7.利⽤数组处理数据
⽮量化。
⽤数组表达式代替循环的计算⽅法,称为⽮量化。
单纯的数据计算还是很普通的。学到了np.meshgrid()这样的⽅法。
8.将逻辑表述转化为数组运算
numpy.where函数是三元表达式(x if condition else y)的⽮量化版本。
在数据分析⼯作中,常常⽤where来从数组A⽣成新的数组B。
numpy.where(cond,x,y)其中x,y不⼀定是数组,单纯的数据也⾏。where⽅法也可以进⾏逻辑上的嵌套。
数学和统计⽅法
sum,mean,std,var,min,max,argmin,argmax,cumsum,cumprod
这些都是需要考虑axis(轴⽅向的)。
⽤于bool型数组的⽅法
1.sum对bool型数组⾥⾯的true和false个数计数(True为1,False为0)
2.any 和all
唯⼀化以及其他集合逻辑
np.unique()返回数组⾥⾯的唯⼀的元素(滤去重复的)
np.in1d(x,12,3)看x中的数组元素是否有12,3.
9.⽤于数组以⼆进制输出输⼊
针对数组:⼀般⽤np.save()和np.load()
针对⽂本⽂件:np.loadtxt()和np.savetxt()
10.随机数⽣成
np.random()函数
四、pandas⼊门
1.pandas的数据结构介绍
Series和Dataframe
Series是由⼀组Numpy数组+各个数据的索引标签组成的类似于⼀维数组的对象。表现形式为左列为索引,右列为数据。Series.values获得数组,Series.index获得索引。
Numpy数组的正常算法(加减乘除,条件过滤),在pandas中都会保留索引和值之间的连接。
直接赋值的⽅式进⾏修改。
⾃然有时候也可以把Series看做⼀种字典。索引可以到对应的数组。索引也可以通过直接赋值
如有已⽣成的字典A,可以⽤个B = Series(A)来将字典转换成Series.
在数据丢失的情况下,我们会发现Series出现了NaN(表⽰数据缺失
数据缺失)。
对应的⽅法:pd.isnull(),pd.notnull(),Series.isnull()
在算数运算中它可以⾃动对齐不同索引的数据。(就是虽然不对齐,但是你知道应该要对齐的那些数据,很⾃动,Series的突出之处:在算数运算中它可以⾃动对齐不同索引的数据。
很⽅便。)
有⾏索引也有列索引,且⾯向⾏和⾯向列的操作基本上平衡。
DataFrame是⼀种表格型数据结构。DataFrame既有⾏索引也有列索引,
有很多种构建DataFrame的⽅法:
有很多种构建DataFrame的⽅法
1.传⼊⼏个等长的数组(列表)作为⼀个整体的data,再⽤DataFrame(data)即可。和Series⼀样,DataFrame会⾃动添加索引。
类似于字典取需要的数据的⽅法:DataFrame["A"](A为其中的⼀个列),这样我们就可以得到类似于⼀个Series的数据,左边是索引,右边是DataFrame中的A列。同样可以进⾏类似的⾏操作DataFrame[S](S为某个⾏的标签)。
在DataFrame中赋值(主要⼏种)
在DataFrame中赋值
1可以直接赋值
2也可以⽤⼀串数组赋值献给某个列(前提是长度要匹配)。
3也可以⽤Series进⾏精确赋值(先建⽴⼀个新列A,再创建⼀个新SeriesB(有数组,有索引),再⽤DataFrame['A'] = B)
python 定义数组在DataFrame中删除多余的列——del["列名"]
4 将嵌套字典(Series数组也差不多)赋给DataFrame.默认将外层字典的键作为了列名,内层字典的键作为了⾏索引(如果显⽰决定了索引,就按显⽰的来)。
ps:如果设置了DataFrame中index和column中的name属性(DataFrame.index.name())
⼆维ndarray形式。
就会显⽰出来的。DataFrame.values()的话,就会返回⼆维ndarray形式
关于索引对象(略微知道即可)
pandas的索引对象负责管理轴标签和其他元数据(如轴名称),构建Series和DataFrame时,数据标签都会转成index.
index对象是不可修改的。
2.基本功能
重新索引:
索引也有两种method:顺序填充,顺序填充ffill和倒序填充bfill.
index(["1","2","3","4",“5”],method = ffill)
在DataFrame中,reindex可以修改整个⾏或者整个列。
如果只传了⼀个序列,就默认是修改⾏的。如果要修改列的话,需要多加⼀个column关键字赋值。(A = 序列 ,reindex(column = A))
当然,可以同时对⾏和列⼀起进⾏index的修改。
丢弃指定轴上的数:
在Series中,⽤Series.drop(index)函数,填哪些index,那⼀⾏或者⼀列就没有了。
在DataFrame中,可以删去任意轴上的index值。(在⼆维中,axis=0为列,axis=1为⾏)
关于Series的索引切⽚,⽅法类似于Numpy数组的索引,但是
1.索引出来的结果不是整数,会给出series的结果样⼦
2.切⽚是⾸尾的数字都包含的,⽽不是末尾-1
在DataFrame中,⽅式也类似。因为DataFrame为⼆维的表格,会显得更加有逻辑性,可以通过切⽚data[0:2]或者bool型条件进⾏选择(类似于data[data["Three"]>5])
DataFrame中有独特的索引⽅法(选取原DataFrame中的⾏列⼦集):
data.ix[["x',“c”],[a,s,d]]前者为⾏名,后者为列名。(如果是单个⾏或列,就不需要加括号了)!我实名证明!Data.ix[]是真的好⽤!
算术运算和数据对齐:
Pandas中的数据相加,⾃动取并集
并集(能正常计算的就继续计算,不能的就返回⼀个NaN)
Series就是列并起来,DataFrame就是⾏和列同时搞定合并。
如果不想返回⼀个NaN,就在合并的时候⽤add⽅法并且多加⼀个参数fill_value = X,这样就会返回X,⽽不是NaN了。
Data1.add(Data2,fill_value = X)
下⾯讲⼀下关于DataFrame和 Series之间的运算:
series对标DataFrame中的某⼀⾏,就可以进⾏计算。会沿着某⼀⾏(之前⽤ix设定的⾏)⼀⾏⾏往下传播。
将series对标DataFrame中的某⼀⾏
函数应⽤and映射:
1.Numpy中的nfunc⽅法可以应⽤于操作Pandas对象。
2.将函数应⽤到由各列或者各⾏组成的⼀维数组上。⽤pd.apply(f),f可以为⾃定义函数。(不太需要⽤,因为在设计的时候DataFrame的⽅法很多都可以直接⽤了 如sum mean)
顺序和排名:
Series——X.sort_index()der()
DataFrame——X.sort_index(axis)#需要多加⼀个轴,便于排名,有单个/多个列需要给指定的列排序的话X.sort_index(by="列
名"or["列名1","列名2"])
降序的话,就多加⼀个参数 ascending = False(这⾥不是按⼤⼩排序,⽽是按照列标签)
需要降序
Data.rank()⽤于排名
带有重复值的轴索引:
某个索引对应多个值,返回⼀个Series.某个索引对应单指,返回对应的值。
汇总和计算描述统计:
1.⽤于在Series中提取单值(sum、mean等)
2.⽤于在DataFrame中提取⼀个Series。(多了需要考虑⾏列的⽅向轴axis)
常见的⼀些⽅法:
data.idmax() 返回某个轴的最⼤值索引或最⼩值索引。
data.cumsum()⼀⾏⾏或者⼀列列累加
data.describe()⼀次性返回很多数据。(针对Series和DataFrame中的Series来返回汇总数据)
相关系数与协⽅差:
(data.B)表⽰data中A列和B列之间的相关系数。
v(data.B)表⽰data中A列和B列之间的协⽅差系数。
data为Series,那就返回的是数据结果。如果是DataFrame,()返回的是完整的相关系数,v()返回如果:data为Series,那就返回的是数据结果。如果是DataFrame,()返回的是完整的相关系数,v()返回的是完全的协⽅差矩阵。
具体在DataFrame中某⼀⾏或列与其他Series或者其他DataFrame,需要⽤with()
传⼊⼀个Series会返回⼀个相关系数值Series.
传⼊⼀个DataFrame则会按名字返回配对的相关系数。
还有⼀个很⾼级的pandas⽅法:data.value——count(在Series和DataFrame中都可以⽤,返回出现频
率,按计数值降序排列)
处理缺失数据:
处理缺失数据
Pandas中有专门的符号表⽰:NaN(表⽰浮点和⾮浮点数组中的缺失数据)
如何过滤掉缺失数据:Series.dropna() 返回⼀个仅含⾮空数据和索引的Series
对于DataFrame,dropna()默认将所有含有NaN的⾏列都删去。(有点错杀的感觉)
添加参数 how = ‘all’,这样将⼀列(⾏)全部都是NaN才删去
填充缺失数据:
1.⽤data.fillna()不加参数默认将所有的NaN填⼊()中的数据。
2.字典⽅法 data.fillna({列1:数据1;列2,:数据2})
层次化索引:
层次化索引是⼀种⾼级功能,使能在⼀条轴上拥有多个索引级别
多个索引级别。(以低维度形式处理⾼纬度数据)
在DataFrame中,层次化索引很重要:通过unstack()和stack()⽅法,将⼀个拥有多重索引的轴的Series可以变成⼀个DataFrame.如图:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。