BGD-py实现学习【1】[转载]

转自:https://github.com/icrtiou/Coursera-ML-AndrewNg

1.源码-对数据读取

import numpy as np
import pandas as pd


def get_X(df):
    """
    use concat to add intersect feature to avoid side effect
    not efficient for big dataset though
    """
    ones = pd.DataFrame({'ones': np.ones(len(df))})#返回某一长度的全为1的array,这是一个字典
    data = pd.concat([ones, df], axis=1)  # column concat #按列合并,加上一列1,为b使用
    return data.iloc[:, :-1].as_matrix()  # this return ndarray, not matrix,选取最后一列作为多维数组返回


def get_y(df):
    '''assume the last column is the target'''
    return np.array(df.iloc[:, -1])#选最后一列


def normalize_feature(df):
    """Applies function along input axis(default 0) of DataFrame."""
    return df.apply(lambda column: (column - column.mean()) / column.std())

1.pandas数据结构Series

转自:https://www.cnblogs.com/linux-wangkun/p/5903380.html

 1.1生成指定Series对象

默认的索引是从0开始。

1.2 生成指定索引

//还有其他的一些知识点,根据字典创建以及自动对齐操作等。

2.pd中的concat函数

转自:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html?highlight=concat 

concat函数就是对两个对象进行拼接,默认的axis是0,有点像R中的rbind函数(按行合并),默认是按行合并;

若axis为1,那么即按列合并。

//讲的挺详细的,还有合并两个列名分别相同的数据框,如果列名不完全一样,则用NA补齐。

2.1 内连接

通过join=inner进行内连接合并,对有相同列名的进行合并,然后返回。

join=outer则是取并集,上面是取交集。

 

3.data.iloc与loc函数

 转自:https://blog.csdn.net/llx1026/article/details/77722608

import numpy as np  
import pandas as pd  
df = pd.DataFrame(np.arange(0,60,2).reshape(10,3),columns=list('abc'))

结果df:
    a   b   c
0   0   2   4
1   6   8  10
2  12  14  16
3  18  20  22
4  24  26  28
5  30  32  34
6  36  38  40
7  42  44  46
8  48  50  52
9  54  56  58

其中loc是索引是字符串时使用,iloc是索引是数字时使用,可以实现数据切片

注意使用df.loc如果取列的话,需要是[:,'列名'],如果直接df.loc['b']报错。

df.loc[0:3, ['a', 'b']]#取出0,1,2,3行的a,b两列,
                       #如果只取一列那么就这样写df.loc[0:3, 'a']
                       #如果取多列,那么要把列用[]放在一起如df.loc[0:3, ['a', 'b']]
输出:
   a   b
0  0   2
1  6   8
2  12  14
3  18  20
#不想抽取连续的行和列,那么就需要用[]把要取的行和列都列出来
#如下
df.loc[[1, 5], ['b', 'c']]或df.loc[[1, 5]][['b', 'c']]

 如果嫌列名太长,则使用iloc

 

下面的是取全部的行和列。

 另一种格式,用这个的话会十分省代码:

还有一种就是如下的格式,意思是取出df中第a列中元素等于6的那一行的b列和c列

df.loc[df['a'] == 6][['b', 'c']]

 //厉害了。

 

//这一句的意思就是,取所有行,并且列怎么取?-1这里表示最后一列,也就是除去最后一列。

4.lamda和DataFrame.apply 函数

原文地址:https://www.cnblogs.com/BlueBlueSea/p/10245920.html