一、简介
Python中的pandas库是数据分析中经常用的一个库,打开\转换csv\xlsx\txt文件、数据清洗、查找数据、简单的作图等等。
pandas中的所有操作是基于两种数据结构:DataFrame和Series,本文就先主要介绍这两种数据结构,后续再介绍基于它们的操作。
二、Series
2.1 创建Series
Series是⼀种类似于⼀维数组的对象,它由⼀组数据(各种NumPy数据类型)以及⼀组与之相关的数据标签(即索引)组成。
2.1.1 用列表创建Series:
import pandas as pd
obj = pd.Series([4, 7, -5, 3])
obj
输出:
0 4
1 7
2 -5
3 3
dtype: int64
Series的字符串表现形式为:索引在左边,值在右边。由于我们没有为数据指定索引,于是会⾃动创建⼀个0到N-1(N为数据的⻓度)的整数型索引。
我们可以通过Series的values和index属性获取其数组表示形式和索引对象。
查看索引:
obj.index
输出:RangeIndex(start=0, stop=4, step=1)
查看值:
obj.values
输出:array([ 4, 7, -5, 3])
2.1.2 带索引的Series
在创建Series的时候,加上参数index并赋值我们想要设置的索引即可。
obj = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
obj
输出:此时的输出就带上了我们设置的索引:[‘d’, ‘b’, ‘a’, ‘c’],而不是默认的[0, 1, 2, 3]
d 4
b 7
a -5
c 3
dtype: int64
2.1.3 通过字典创建Series
如果数据被存放在字典里,那么我们可以直接将其创建为Series对象,索引就是字典的键。
data = {
'a': 20, 'b': 30, 'd': 50}
obj = pd.Series(data)
obj
输出:
a 20
b 30
d 50
dtype: int64
三、DataFrame
DataFrame是pandas用的最多的数据结构,它和Series不同,Series只有一列,而DataFrame可以有多列。DataFrame的结构形式和sql比较像,每一列可以看作是一个字段,一个特征(机器学习),而每一行则是所有列的取值。
3.1 创建DataFrame
创建DataFrame的方法有很多,本文只介绍常用的几种。
3.1.1 用数组创建DataFrame
#生成3行5列的数组
data = np.random.randn(3, 5)
df = pd.DataFrame(data)
df
输出:
0 1 2 3 4
0 0.614040 0.202512 -2.668371 0.645818 -1.167729
1 0.086797 2.109643 0.130015 -0.865688 0.034858
2 1.956728 1.868124 0.085561 -1.188619 0.323035
DataFrame既有⾏索引也有列索引,它可以被看做由Series组成的字典(共⽤同⼀个索引),因此和Series一样,当我们没有设置索引时,DataFram的行索引和列索引都是0, 1, ……,N-1
同样,我们可以通过DataFrame的values属性查看它的值,index属性查看它的行索引,columns属性查看它的列索引(列名):
查看值:
df.values
输出:
array([[ 0.61403982, 0.20251155, -2.66837106, 0.64581832, -1.16772939],
[ 0.08679744, 2.10964251, 0.13001494, -0.86568831, 0.03485802],
[ 1.9567277 , 1.86812424, 0.08556118, -1.18861883, 0.32303491]])
查看行索引:
df.index
输出:RangeIndex(start=0, stop=3, step=1)
查看列索引(列名):
df.columns
输出:RangeIndex(start=0, stop=5, step=1)
3.1.2 创建带索引的DataFrame
由于DataFrame既有行索引index,又有列索引(列名)columns,因此创建时可根据需要创建其中一个或都创建。
data = np.random.randn(3, 5)
df = pd.DataFrame(data, index=['a', 'b', 'c'], columns=['aa', 'bb', 'cc', 'dd', 'ee'])
df
输出:
aa bb cc dd ee
a -0.284388 -0.238337 0.115592 -0.722185 -0.798702
b -1.875249 0.248238 -0.140116 0.775234 -0.873626
c 0.343352 1.166614 0.757785 0.304297 0.520813
3.1.3 利用字典创建
和创建Series类似,也可以利用字典创建DataFrame,此时字典的键会变为列名。
data = {
'name': ['apolo', 'adm', 'bolon', 'cathy'],
'age': [18, 29, 32, 28],
'sex': ['male', 'female', 'male', 'male']}
df = pd.DataFrame(data)
df
输出:
name age sex
0 apolo 18 male
1 adm 29 female
2 bolon 32 male
3 cathy 28 male