python中的pandas小试

来源:互联网 发布:剑网3捏脸数据 编辑:程序博客网 时间:2024/05/22 08:26

在实习的项目中,得到宽表后的后续工作是用R语言写的,包括数据探索,数据清洗,建模,模型分析。因为之前用过python,写过简单爬虫,就想着自己试着将R语言的脚本写成python,或许对于未来有帮组、

然而,在pyhon3.5连接teradata的问题上一直搞不通、、、

所以,只能先学一下pandas之类的基础了,本来想法是直接将R语言改成python,简单粗暴的方法也是最有效的做法。

一、pandas包的常用数据类型:Series和DataFrame

其实,Series和DataFrame分别对应的是R语言中的向量和数据框data.frame,连名字都一样。我个人觉得没多大的差别,只是听说python的DataFrame比R的dataframe更强大,慢慢研究吧。

我觉得,Series和DataFrame比起R语言中的向量和数据框,只是丰富了行的功能,也就是索引值。在R语言中,数据框就更类似于数据库中的表,更关注的是列,也就是属性。数据库中筛选列用select,筛选行用where。

1、Series:向量

python的常用数据类型,list,tuple,dictionary,pandas包中的Series可以接收这三者的值,并将其转换成向量,list和tuple是没有索引的(index),dictionary是默认将key当做索引,而values当做值。

①接收一个tuple:

>ser1=Series(('a','b','c'))
>ser1
Out[173]: 
0    a
1    b
2    c
dtype: object

②接收一个list:

>ser2=Series(['m','n','q'])
>ser2
Out[175]: 
0    m
1    n
2    q
dtype: object

③接收一个dictionary:

>ser3=Series({'a':[1,2,3],'b':[1,5,6]})
>ser3
Out[177]: 
a    [1, 2, 3]
b    [1, 5, 6]
dtype: object

>ser3.index
Out[178]: Index(['a', 'b'], dtype='object')

>ser3.values
Out[179]: array([[1, 2, 3], [1, 5, 6]], dtype=object)

>ser3.values[1]
Out[180]: [1, 5, 6]

④可以指定索引值,如果没有指定Series的索引,则自动生成从0开始的索引值。

>ser4=Series([2,3,4,5,6],index=['a','b','c','d','e'])


>ser4
Out[184]: 
a    2
b    3
c    4
d    5
e    6
dtype: int64

如果索引值不足,则提示错误,超出也会提示错误。只能一对一、、、

很明显可以通过索引值来得到values的值,这与R语言向量一样。

>ser4['c']
Out[190]: 4

⑤两个Series的合并运算,类似SQL的连接,R语言中的marge()。

>ser
Out[192]: 
ohio      3500
oregon    1600
texas     7100
utah       500
dtype: int64

>ser2
Out[194]: 
ohio          3500
oregon        1600
texas         7100
california     400

>ser+ser2
Out[195]: 
california        NaN
ohio           7000.0
oregon         3200.0
texas         14200.0
utah              NaN

Series就这些东西,太简单了,去R语言了解一下向量的用法,基本上就可以懂的差不多。

不同的是,Series是python的包,故操作python中的数据类型,有意思!


2、DataFrame 数据框,

Series是一个带索引的一列,但是DataFrame是一个带索引的多列,多了很多方法。

①DataFrame同样可以接受python自带的数据类型list,dictionary,但是接收不了tuple,最多只能接收两个list。

>pd=DataFrame({'a':[1,2,3],'b':[3,5,6],'c':[2,6,8]})
>pd
Out[206]: 
   a  b  c
0  1  3  2
1  2  5  6
2  3  6  8

或者:

>dic={'a':[1,2,3],'b':[3,5,6],'c':[2,6,8]}

>pd2=DataFrame(dic,index=['one','two','three'])

>pd2
Out[216]: 
           a  b  c
one    1  3  2
two     2  5  6
three  3  6  8

很有意思的是,DataFrame可以接收一个嵌套的dictionary字典,外层keys默认是列名,内层keys默认是行名,也就是索引index,列子如下:

>pd3=DataFrame({'a':{2001:2.4,2002:2.5},'b':{2000:2.3,2001:2.7,2002:3.5},'c':{2001:4.8,2002:3.9}})
>pd3
Out[225]: 
          a        b       c
2000  NaN  2.3  NaN
2001  2.4  2.7  4.8
2002  2.5  3.5  3.9

DataFrame是一个列的数据集合,其引用列的方式为:

>pd2['a']
Out[219]: 
one      1
two      2
three    3
Name: a, dtype: int64
或者:
>pd2.a
Out[220]: 
one      1
two      2
three    3
Name: a, dtype: int64

没了,也不知道哪里需要研究的,拿来就可以用,DataFrame的底层实现也不用去研究,python在数据处理中只当做一个工具,至于DataFrame.ix属性的使用, 下面再补充吧。


3、索引index

①reindex:重新排列索引,如果根据重新排列的索引找不到原来值则默认是NaN值;

>pd2
Out[237]: 
       a  b  c
one    1  3  2
two    2  5  6
three  3  6  8

>pd2.reindex(index=['three','two','one'])
Out[239]: 
       a  b  c
three  3  6  8
two    2  5  6
one    1  3  2

对列进行重新索引为:

>pd2.reindex(columns=['b','c','a'])
Out[240]: 
       b  c  a
one    3  2  1
two    5  6  2
three  6  8  3


4、drop()函数

与reindex()一样,默认也是对行进行操作,

df.drop([’one','two'],axis=0):删除df中索引名index是'one'和'two'的两行

df.drop(['a','b'],axis=1):删除df中列名是’a'和‘b’的两列


5、pandas专门引用了一个ix属性,用来按照类似numpy包方法引用数据

>pd2
Out[257]: 
       a  b  c
one    1  3  2
two    2  5  6
three  3  6  8

>pd2.ix['two',['a','b']]
Out[258]: 
a    2
b    5
Name: two, dtype: int64

注释:pd2.ix是属性值,用引用list的方式引用它,中间用逗号隔开,前后分别是行列,这个跟R语言也一样。

R语言中,如果选择第1到第3号,和全部的列用df[1:3,],而在python中用df[1:3,:],冒号不能省略!

有了DataFrame.ix后,数据框的引用非常的方便。













0 0