pyhton pandas库的学习

pandas两种主要的数据结构:Series和DataFrame

Series:类似于一维数组的对象,由一组数据以及一组与之相关的数据标签(即索引)组成。Series中的索引值可以重复

DataFrame:一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看成是Series组成的字典

1. Seriess

通过一维数组创建:

  arr = np.array([1,2,3,4,np.NaN])

  series1 = Series(arr)

自定义Series索引:

series2 = Series([90,80,85])
series2.index = [u'语文',u'数学',u'英语']
print(series2)

series2 = Series([90,80,70],index=[u'语文',u'数学',u'英语'])
print(series2)

RangeIndex(start=0, stop=5, step=1)
语文    90
数学    80
英语    85

通过字典方式创建,key重复会被后面的覆盖:

dict1 = {'一':100,'二':200,'三':300,'一':500}
series3 = Series(dict1)
print(series3)
print(series3.index)
print(series3.values)
print(series3.dtype)

一    500
三    300
二    200
dtype: int64
Index([u'一', u'三', u'二'], dtype='object')
[500 300 200]
int64

Series索引可以重复:

扫描二维码关注公众号,回复: 1538921 查看本文章
series4 = Series([90,80,70,100])
series4.index = [u'一',u'二',u'三',u'一']
print(series4)
print(series4[u'一'])

一     90
二     80
三     70
一    100
dtype: int64
一     90
一    100
dtype: int64

  

Series的运算

series = Series({'101': -100,'102':200,'103': 300})
print(series)
print(series > 100)
print(series / 100)
print(np.fabs(series))
print(np.exp(series))

101   -100
102    200
103    300
dtype: int64
101    False
102     True
103     True
dtype: bool
101   -1.0
102    2.0
103    3.0
dtype: float64
101    100.0
102    200.0
103    300.0
dtype: float64
101     3.720076e-44
102     7.225974e+86
103    1.942426e+130
dtype: float64

  

Series缺失值检测

scores = Series({'a':90,'b':80,'c':95})
new = ['a','b','cc','c','d']
scores1 = Series(scores,index=new)
print scores1
print(pd.isnull(scores1))
print(scores1[pd.isnull(scores1)])
print(scores1[pd.notnull(scores1)])

a     90.0
b     80.0
cc     NaN
c     95.0
d      NaN
dtype: float64
a     False
b     False
cc     True
c     False
d      True
dtype: bool
cc   NaN
d    NaN
dtype: float64
a    90.0
b    80.0
c    95.0
dtype: float64

  

Series自动对齐,在进行运算时会自动匹配相同的索引进行运算

s1 = Series([1,2,3],index=['p1','p2','p3'])
s2 = Series([4,5,6,7],index=['p2','p3','p4','p5'])
print(s1+s2)

p1    NaN
p2    6.0
p3    8.0
p4    NaN
p5    NaN
dtype: float64

  

2. DataFrame

通过二维数组创建:

df = DataFrame([['a','b','c','d'],[1,2,3,4]])
print(df)
   0  1  2  3
0  a  b  c  d
1  1  2  3  4

arr = np.array([
    [1,2,3,4],
    [2,3,4,5],
    [3,4,5,6]
])

df = DataFrame(arr,index=['one','two','three'],columns=['a','b','c','d'])   #index是行索引,columns是列索引
print(df)
print(df.values)
 a  b  c  d
one    1  2  3  4
two    2  3  4  5
three  3  4  5  6
[[1 2 3 4]
 [2 3 4 5]
 [3 4 5 6]]

  

通过字典方式创建:

dict1 = {
    'a': ['100','101','102'],
    'b': ['1','2','3'],
    'year': ['2019','2018','2017'],
    'month': '06'
}

df = DataFrame(dict1)   #字典形式创建的DataFrame,key会做为列索引
df.index = ['one','two','three']
print(df)

         a  b month  year
one    100  1    06  2019
two    101  2    06  2018
three  102  3    06  2017

  

DataFrame数据获取:

可以直接通过列索引获取指定列的数据 df[column_name]

通过ix方法来获取对应行索引的行数据 df.ix[index_name]

 3. pandas基本功能

3.1.数据文件读取/文本数据读取

  常用的方法是read_csv

  df = pd.read_csv("C:/Users/ADMIN/Desktop/data.txt",sep=";",header=None) #header=None,第一行数据不作为索引

print(df)
df = pd.read_csv("C:/Users/ADMIN/Desktop/data.txt",sep=";",header=None) #header=None,第一行数据不作为索引
print(df)

       0   1   2   3     4
0  gerry  18  90  95  96.0
1    tom  20  92  94   NaN
2   lili  21  98  97  96.0

3.2.索引、选取和数据过滤

pandas数据过滤

columns = ['name','age',u'语文',u'数学',u'英语']
df.columns = columns
print(df)

print(df[columns[2:]])

    name  age  语文  数学    英语
0  gerry   18  90  95  96.0
1    tom   20  92  94   NaN
2   lili   21  98  97  96.0
   语文  数学    英语
0  90  95  96.0
1  92  94   NaN
2  98  97  96.0

删除NaN的行

print(df.dropna()) #删除整行包含nan值的行数据

print(df.dropna(how="all")) #删除整行全是nan值的行数据

填充数据fillna

df = DataFrame(np.random.randn(7,3))
df.ix[:4,1] = np.nan
df.ix[:2,2] = np.nan
print(df)
print(df.fillna(0)) #填充所有nan
print(df.fillna({1:1,2:2})) #按列进行填充

 0         1         2
0 -1.181993       NaN       NaN
1 -1.537796       NaN       NaN
2 -0.334437       NaN       NaN
3 -0.629362       NaN  1.336971
4 -0.476075       NaN  1.410920
5  0.661803  1.926648  1.311989
6  0.160683  0.294160 -0.341011
          0         1         2
0 -1.181993  0.000000  0.000000
1 -1.537796  0.000000  0.000000
2 -0.334437  0.000000  0.000000
3 -0.629362  0.000000  1.336971
4 -0.476075  0.000000  1.410920
5  0.661803  1.926648  1.311989
6  0.160683  0.294160 -0.341011
          0         1         2
0 -1.181993  1.000000  2.000000
1 -1.537796  1.000000  2.000000
2 -0.334437  1.000000  2.000000
3 -0.629362  1.000000  1.336971
4 -0.476075  1.000000  1.410920
5  0.661803  1.926648  1.311989
6  0.160683  0.294160 -0.341011

3.3.算法运算和数据对齐

常用的数据统计方法:

相关系数与协方差:

df = DataFrame({
    "GDP":[12,23,34,20,30],
    "air_temperture": [26,27,30,28,29],
    "year": ['2001','2002','2003','2004','2005']
})
print(df)
print u"相关系数:\n",df.corr()
print u"协方差:\n", df.cov()
print df['GDP'].corr(df['air_temperture'])
print df['GDP'].cov(df['air_temperture'])
pandas唯一值、值计数以及成员资格
ser = Series(['a','b','c','d','a','b'])
print(ser)
print ser.unique()  #去重
print ser.value_counts()    #计数,默认按值出现频率降序排列
mask = ser.isin(['b','c'])  #判断每个元素是否为b或c
print mask
print(ser[mask])

0    a
1    b
2    c
3    d
4    a
5    b
dtype: object
['a' 'b' 'c' 'd']
b    2
a    2
d    1
c    1
dtype: int64
0    False
1     True
2     True
3    False
4    False
5     True
dtype: bool
1    b
2    c
5    b
dtype: object

  

 

猜你喜欢

转载自www.cnblogs.com/weiququ/p/9158916.html