pandas 的特点

可以处理各种类型的数据,而不只是数值数据,可以弥补numpy的不足。
一般常用的类型有:

  1. Series:一维数据,是一个带标签的数组
  2. DataFrame:二维数据,是Seris容器

pandas使用概要

Series创建

创建一个Series,并查看其格式:

import pandas as pd


t = pd.Series([i for i in range(5,10)])
print(t,type(t))

运行结果:

0    5
1    6
2    7
3    8
4    9
dtype: int64 <class 'pandas.core.series.Series'>

结果中左边一列为索引(index),右边一列为内容。
如果需要指定索引:
(索引的数量>=数据长度,没有数据的部分pandas自动改为nan,整个Series的类型变为浮点类型。)
方法1.:需要加入index参数(列表):

import pandas as pd
import random as rd


t = pd.Series([range(i) for i in range(5,10)],index=list("abcde"))
print(t)

方法2:通过字典实现
字典的key即索引,值即Series的值

import pandas as pd


dict = {'name':'me', 'age':20, 'num':12345}
t =pd.Series(dict)
print(t)

修改Series数据类型

基本同numpy修改数据类型。
查看类型:series_name.dtype
修改类型:series_name.astype() #传入类型参数,如int/float/str

Series的切片和索引

  • 索引
    使用以下方法:
    (假设索引为index)
#通过值(假设用布尔索引,取值大于n的部分)
series_name[series_name>n]
#通过索引(字符串)
series_name[index]
#通过行数(假设取出第a到b行)
series_name[a-1:b-1]
#取出以列表list_1为行数的一系列Series数据
series_name[list_1]

假设指定索引的部分超出了原有的索引的范围,则输出时超出部分值表示为nan
这边同时引入Series遍历的方法:

for i in series_name:
    print(i)

下面给出一些常用方法:

#查看所有index
series_name.index
#查看Series长度
len.(series_name.index)
#将series的index转化成列表并取出部分索引(假设取第三个以后)
list(series_name.index)[:2]
#提取series中所有的值(value)
#此处注意,提取的value以np.array的数组形式出现
series.values

pandas读取数据

一般方法为:
import pandas as pd

pd.read_xxxx(此处可参照提示)

如常用的:

  1. 读取csv文件:
miport pandas as pd

pd.read_csv('path/file_name')
  1. 读取excel文件
pd.read_excel('path/file_name')
  1. 读取数据库
    mysql:
pd.read_sql(sql_sentence.connection)

mongoDB:
咱也没学过,待补充

pandas 的dataframe

创建

data是一个array-like类型的数据

pd.DataFrame(data)

输出的不仅有数据,还有行和列的索引。行索引成为index(asis=0),列索引成为columns(axis=1)。
如:

import pandas as pd
import random as rd
import numpy as np
import string



t = pd.DataFrame(np.array([rd.randint(10,20) for i in range(10)]).reshape(2,5),
                 index=list(string.ascii_uppercase[0:2]),
                 columns=list(string.ascii_lowercase[0:5]))
print(t)

输出:

a b c d e
 a 20 10 18 13 18
 b 12 20 10 11 10

同样的,可以用字典来创建DataFrame
但是有缺失值的时候,会出现nan,整个dataframe中的数字都变成了float类型。

在使用爬取到的信息并放入dataframe时,可以直接对信息进行筛选,留下有效信息,如新建一个字典,把需要的信息放入新字典

data_list = {}
for i in data:
    new_dict[key1] = i[key1]
    new_dict[key2] = i[key2]
    ...    
    data_list.append(new_dict)

dataframe的各种属性

dataframe中的属性:

.index:行索引
 .colums:列索引
 .values:所有值
 .shape:行列数
 .dtype:每一列的数据类型
 .ndim:维度
 .head():显示前几行,默认5
 .tail():显示末尾几行,默认5
 .info():相关信息概览,包括行列数,字段数据类型等
 .describe:快速统计

dataframe的排序和切片方法

排序:

df_name.sort_values(by='key_1', ascending=True)

升序排序,by代表用来排序的数据列,ascending代表升序,改为False则是降序。

切片/切片赋值:

取行\列

df_name[:20]

[ ]中直接写数字,即取行。key代表要取的参数名。得到一个新的dataframe,可以在此基础上取列索引,对列进行操作。
如:df_name[:20][key_1]

但是pandas有自己的选择方式

  1. df_name.loc
    通过标签索引数据
    df_name.loc[‘label_1’:‘label_2’, ‘label_3’:‘label_4’]

举例:
注:索引的头和尾都是能够被选中的

import pandas as pd
import random as rd
import numpy as np
import string


#创建一个随机的dataframe
data = np.array([rd.randint(0,20) for i in range(200)]).reshape(50,4)
t = pd.DataFrame(data, columns=list('ABCD'))


#把data中前25行按照'C'中数字升序排列,并显示t_1中的A、C、D三列数据
t_1 = t.loc[0:25,['A','C','D']].sort_values('C',ascending=True)
print(t_1)

结果:

A   C   D
1    0   0   9
2    8   0  14
15   9   0  13
20   6   0  18
14   8   3   0
19   9   5   5
18   4   5  14
4    8   9  20
11   2  10  16
9   18  11  10
23   6  11  17
22  11  11  19
10  20  12  16
6    6  12  12
16  10  13  17
21   9  13   3
8   13  14   1
7    8  16  14
17  15  17  19
5    8  17  14
3    7  17  13
25  12  17  18
0    4  18   4
24  19  18  15
13  16  20   0
12  12  20   5
  1. df_nameiloc
    通过位置获得数据
    df_name[[行数组], [列数组]]

例:

import pandas as pd
import random as rd
import numpy as np
import string


#创建一个随机的dataframe
data = np.array([rd.randint(0,20) for i in range(200)]).reshape(50,4)
t = pd.DataFrame(data, columns=list('ABCD'))


#显示data中前25行A、C、D三列数据
t_1 = t.iloc[0:25,[0,2,3]]

print(t_1)

结果:

A   C   D
0   16   1  15
1   15   1  16
2   13  14  13
3   14  11  20
4    6   7  15
5   11   1  13
6   10  14  20
7    4   4   0
8   11   0  19
9    6  20  15
10  18  15   5
11  16   7   5
12   4  11  12
13  17   0  11
14   2  16   1
15  14   4  20
16   8   3   2
17  10  19  14
18  16   5   7
19   7   1   0
20   9   0  17
21   2  14   7
22   9  13  16
23   6   0   0
24  16  16  13