pandas和numpy使用小记

numpy数组不可以扩展

可是它最大的缺点就是不可动态扩展——“NumPy的数组没有这种动态改变大小的功能,numpy.append()函数每次都会重新分配整个数组,并把原来的数组复制到新数组中。

http://blog.chinaunix.net/uid-23100982-id-3164530.html


numpy数组的展平

可以用flatten,也可以用numpy.ravel()

比如下面这个数组

arr = np.arange(10).reshape(1,2,5)
Out[40]: 
array([[[0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9]]])

可以使用fatten和ravel函数进行展平

arr.flatten()

numpy.ravel(arr)

Out[41]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])



numpy数组合并

如果只有两个元素,那么用append合并就行

如果有三个或者以上的元素,那么用numpy.concatenate这个函数

numpy.concatenate((a1, a2, ...), axis=0)

把n个数组放到一个tuple里面,作为一个大参数(a1, a2, ...)放到concatenate这个函数里面


python list 合并

python list合并,可以用append,extend,也可以直接用+号进行

z=x+y



numpy 数组的初始化和循环填充

有的时候想新建个array,然后通过循环不断append补充这个数组。后来看到stackoverflow上说这个是非常低效率的。

numpy的array一般是先初始化好尺寸的数组,全附上0,然后再一个一个修改这个值。而不是不断的扩充数组结构。

比如下面这个就是不太推荐的写法

big_array # Initially empty. This is where I don't know what to specify
for i in range(5):
    array i of shape = (2,4) created.
    add to big_array

参考http://stackoverflow.com/questions/4535374/initialize-a-numpy-array



python目录遍历

一个用os库

一个用glob库


list,array,dataframe,mat 几个容器的使用

list如果能用就用,最底层,效率也最高的元素,而且支持字符和数字混搭

np的array付给他更多的操作,但是不支持字符,需要chararray才能混搭,chararray其实功能不是特别强大,所以不推荐numpy的数组里面混搭文字和数字

np的dataframe适合大小规模的选择和操作,但是不适合一点点增添,最好是先把一个大的array都鼓捣好了一个,一整个array直接全塞进去。

所以基本是简单的数据用list,需要做处理的中低层的数据用array,然后烩成一锅全装进dataframe做大规模范围的数据分析。 如果需要矩阵操作的时候才使用numpy的mat

这是我的理解。



许多python和numpy对某个数据的处理,不会改变数据本身,而是把结果拷贝出来输出给其他对象

比如s.join('something')

arr.append(arr2)



对dataframe columns的选择

dataframe一般都是根据标签选择列,比如dataframe['feature1']

同时也可以使用ix,按照列数进行选择,比如选择第一列和第二列 df.ix[:,0:2]

如果选择的是多个列,那么会返回的是dataframe对象

而如果只选择一个列,那么会返回series对象,这个比较蛋疼。



python format字符串的输出

str.format()  //str是字符串

1)  format函数前的str字符串可以用{}来做占位符

‘a is {},b is {}’.format(a,b)

2) 也可以在{}里面加数字用来和后面的变量进行对应

‘a is {1},b is {2}, a is {1}’.format(a,b)

3) 还可以用讲里面的数字视为对象本身
比如lis=['xiaoming','xiaowang']

‘my name is {0[0]},his name is {0[1]}’.format(lis)

4) {}里面还可以对输出的精度和进制进行输出

'the number is {:.2f}'.format(332.245)

'the binary value of the number is {:b}'.format(332.245)



dataframe之间做运算,要用到.values  除法
for i in range(len):
df3[i]=df1[i]-df2[i].values
一个dataframe,和另一个dataframe的values才可以做直接的运算

dataframe的slicing
df=pd.DataFrame()
df[1]  #这个是不行的
df[1:2] #这样才行   有头有尾才行    或者写成df.ix[1,:]  #最好用index进行slice的,都用.ix这个函数进行slice,这样规范一些。
 

dataframe每行都减去前一行 怎么实现(第一行保持原值
方法一:用index进行整体减法
df[:-1] -df[1:]
方法二: 自己笨笨的写循环呗。
for i in range(1,length):
df.ix[i,:]-df.ix[i-1,:]
方法三:调用shift方法,
df-df.shift(1)   #df.shift(1)  就是df整体下移的结果,至于新dataframe的首行则为nan,需要自己再手动赋0


df.fillna(inplace=True, method='ffill')  inplace就是自己替换自己了


两个1*20的数组如何合成一个2*20的数组?用asarray

np.asarray(np.random.randn(10),np.random.randn(10))


你可能感兴趣的:(数据分析)