程序员编程地带机器学习与数据挖掘

Pandas

2019-03-08  本文已影响4人  MA木易YA

    pandas是一款数据处理工具,集成了numpy以及matplotlib,拥有便捷的数据处理以及文件读取能力

核心数据结构

1. DataFrame

    numpy仅用作计算,在数据表示方面还有所欠缺,很难从数据上面看出信息表达的含义,在这里我们可以将DataFrame看作是有行列索引(标题)的二维数组

I. DataFrame属性

pd.DataFrame(array, index,columns)

因为pandas是集成了numpy的,属性方面用法和功能都类似

II. 方法

 import pandas as pd

#二维数组定义
 s = [[10,20],[20,30],[30,40]]
#行索引定义
 row = ["test{}".format(i+1) for i in range(3)]
#列索引定义
 col = ["2019-3-{}".format(i+1) for i in range(2)]

data = pd.DataFrame(s, index=row, columns=col)

#输出
       2019-3-1  2019-3-2
test1        10        20
test2        20        30
test3        30        40

III.设置索引

只能整体修改,不能修改单独某一项

reset_index(drop=False)

    重置索引值,默认drop为False,不删除原索引,将其单独立为一列,在此基础上将索引重置

#设置多个索引
df = pd.DataFrame({'month':[1,4,7,10],'year':[2012,2014,2013,2016],'sale':[55,40,84,31]})

df.set_index(['year', 'month'])#设置之后此时返回的index是MultiIndex类型

#输出
            sale
year month
2012 1        55
2014 4        40
2013 7        84
2016 10       31
>>>

IV. MultiIndex

多级或分层索引对象,可用于存放三维数据

 new_df = df.set_index(['year', 'month'])

new_df.index

new_df.index.names

new_df.index.levels

#输出
----------------------index--------------------------------------------
MultiIndex(levels=[[2012, 2013, 2014, 2016], [1, 4, 7, 10]],
           labels=[[0, 2, 1, 3], [0, 1, 2, 3]],
           names=['year', 'month'])
----------------------------------------------------------------------------------

----------------------names--------------------------------------------
FrozenList(['year', 'month'])
----------------------------------------------------------------------------------

----------------------levels--------------------------------------------
FrozenList([[2012, 2013, 2014, 2016], [1, 4, 7, 10]])

2. Panel

    存放三维数据的面板容器,0.20.0后已经弃用,推荐DataFrame上的MultiIndex方法表示3D数据

I.维度

3. Series

可理解为带索引的一维数组

I. 属性

II. 创建Series

指定内容,默认索引

pd.Series(np.arange(10))

#输出
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9


指定索引

pd.Series([6.7,5.6,3,10,2],index=[1,2,3,4,5])

#输出
1     6.7
2     5.6
3     3.0
4    10.0
5     2.0
dtype: float64

pd.Series({'red':1000,'blue':100,'green':500,'yellow':200})

#输出
red       1000
blue       100
green      500
yellow     200
dtype: int64

III. 索引操作

data = pd.readcsv('filename.csv')

1)直接索引
          必须满足先列后行的规则,data[col][row]
2)按名字索引
          new_data = data.locp[索引名,索引名]或者new_data = data.locp[索引名][索引名]
3)直接按照数字索引
          data.iloc[number,number]
4)IX组合索引(数字和名字组合)
          data.ix[parm,parm]

IV. 赋值

按照上述索引方法找到对应数据进行赋值即可

V. 排序
1)按照内容排序

sort_values(by=,ascendinf=)

2)按照索引排序

sort_index()

VI. DataFrame运算
1)算术运算
          可以直接用运算符(+、-、*等)或者相应的运算方法(add()、sub()等),作用于数据里面的所有元素
2)逻辑运算

V. 统计运算
    max、mean、median、var、std等,此外可以使用describe()方法统一进行运算,它会自动统计出一些常用运算结果(包含以上内容)

count.png

VI. 自定义运算

如果需要额外的运算规则,可以自定义一个函数进行统计

apply(func, axis=0)

#自定义一个对列数据最大值减最小值的运算函数

data.apply(lambda x : x.max()-x.min(), axis=0)

pandas画图

image.png

文件读取与存储

image.png

1. csv操作

I. 读取csv

pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, names=, usecols=)

II. 写入csv

DataFrame.to_csv(path_or_buf=None, sep=',', columns=None, header=True, index=True, index_label=None,mode='w', encoding=None)

2. HDF5操作

    HDF5的存储支持压缩,使用的方式是blosc,速度最快也是pandas默认支持的,可以提高磁盘利用率,节省空间的同时还支持跨平台,可以轻松迁移到hadoop上面,HDF5文件的读取和存储需要指定一个键,值为要存储的DataFrame,一个键对应一个DataFrame,也可以相当于是存储三维数据了

I.读取hdf5

    读取以及写入需要指定键,不同的键对应不同的DataFrame

pandas.read_hdf(path_or_buf, key=None, **kwargs)

II. 写入hdf5文件

可以写入同一个hdf5文件当中,以不同的键区分开来

DataFrame.to_hdf(path_or_buf, key, kwargs)

3. JSON文件操作

I. 读取

pandas.read_json(path_or_buf=None,orient=None,typ='frame',lines=False)

2. 写入

pandas.to_json(path_or_buf=None,orient=None,typ='frame',lines=False)

上一篇下一篇

猜你喜欢

热点阅读