美文网首页我爱编程
pandas和numpy使用小记

pandas和numpy使用小记

作者: hzyido | 来源:发表于2017-05-03 14:29 被阅读1712次

    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)

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

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

    1. 还可以用讲里面的数字视为对象本身
      比如lis=['xiaoming','xiaowang']
      ‘my name is {0[0]},his name is {0[1]}’.format(lis)

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

    '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就是自己替换自己了

    两个120的数组如何合成一个220的数组?用asarray

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

    相关文章

      网友评论

        本文标题:pandas和numpy使用小记

        本文链接:https://www.haomeiwen.com/subject/bnwktxtx.html