Pandas用法详细介绍
文章目录
1.pandas模块安装
在命令行使用pip install pandas
即可
2.pandas介绍
pandas 是基于numpy 的一种工具,该工具是为了解决数据分析任务而创建的。pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
pandas主要包含了3个数据结构:
- 系列(Series)
- 数据帧(DataFrame)
- 面板(Panel)
这些数据机构建立在numpy之上,这也就说明pandas建立的数据结构进行运算时很快。
Series可以看作是一个1维列向量,DataFrame可以看作是一个2维表或矩阵,Panel可以看作是3维向量,存放DataFrame的容器。
数据结构 | 维数 | 描述 |
---|---|---|
Series | 1 | 1D标记均匀数组,同构数据,尺寸大小不变,数据可变 |
DataFrame | 2 | 一般2D标记,异构数据,大小可变,数据可变。 |
Panel | 3 | 一般3D标记,异构数据,大小可变,数据可变。 |
3.系列Series
panda中的Series
构造函数如下:
pandas.Series( data, index, dtype, copy)
构造函数的参数如下表:
编号 | 参数 | 描述 |
---|---|---|
1 | data | 数据采用各种数据结构都行,如ndarray , list , tuple , constant , dict |
2 | index | 索引值必须是唯一的和散列的,与数据的长度相同。 默认np.arange(n) 如果没有索引被传递。 |
3 | dtype | dtype 用于数据类型。如果没有,将推断数据类型 |
4 | copy | 复制数据,默认为false |
创建一个空的系列
示例:
import pandas as pd
s = pd.Series()
print(s)
输出结果如下:
Series([], dtype: float64)
使用ndarray创建系列
如果使用ndarray
创建系列,传递index
时必须喝ndarray
的长度相同。不传递索引的话就默认为(n)
,即[0, 1, ... , n-1]
import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
s1 = pd.Series(data)
s2 = pd.Series(data, index = [100,101,102,103])
print(s1)
print(s2)
输出结果如下:
0 a
1 b
2 c
3 d
dtype: object
100 a
101 b
102 c
103 d
dtype: object
通过字典创建一个系列
Series可以通过dict
来创建,不指定索引的话dict
中的键将充当索引,如果传递了索引,索引中与标签对应的数据中的值将被拉出。
示例:
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s1 = pd.Series(data)
s2 = pd.Series(data, index = ['d','c','b','a'])
print(s1)
print(s2)
输出如下:
a 1
b 2
c 3
dtype: int64
d NaN
c 3.0
b 2.0
a 1.0
dtype: float64
注意观察 - 索引顺序保持不变,缺少的元素使用NaN(不是数字)填充。
通过标量创建系列
如果通过标量(单个数值)来创建系列,那么必须指定索引,然后通过重复该值来完成。
示例
data = 5
df = pd.Series(data, index = [0, 1, 2, 3])
print(df)
输出如下:
0 5
1 5
2 5
3 5
dtype: int64
系列中数据的访问
系列访问数据元素类似列表和ndarray
示例1:下标
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print(s[0])
print(s[:3]
print(s[-3:])
输出如下:
1
a 1
b 2
c 3
dtype: int64
c 3
d 4
e 5
dtype: int64
使用标签访问数据
一个系列就像一个固定大小的字典,可以通过索引标签获取和设置值。
示例:
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print(s['a']) #访问单个元素
print(s[['a','c','d']]) #访问多个元素, 注意此时要用[[ ]]
输出如下:
1
a 1
c 3
d 4
dtype: int64
4.DataFrame数据帧
pandas中的DataFrame
构造函数如下:
pandas.DataFrame( data, index, columns, dtype, copy)
构造函数的参数如下表:
编号 | 参数 | 描述 |
---|---|---|
1 | data | 数据采用各种数据结构都行,如ndarray , list , tuple , constant , dict ,map 和另一个DataFrame |
2 | index | 默认np.arange(n) 如果没有索引被传递。 |
3 | columns | 对于列标签,可选的默认语法是 - np.arange(n) 。 这只有在没有索引传递的情况下才是这样。 |
4 | dtype | dtype 用于数据类型。如果没有,将推断数据类型 |
5 | copy | 复制数据,默认为false |
创建一个空的DataFrame
示例:
import pandas as pd
df = pd.DataFrame()
print(df)
输出如下:
Empty DataFrame
Columns: []
Index: []
通过包含ndarray/list的字典创建DataFrame
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])
print(df1)
print(df2)
输出如下:
Age Name
0 28 Tom
1 34 Jack
2 29 Steve
3 42 Ricky
Age Name
rank1 28 Tom
rank2 34 Jack
rank3 29 Steve
rank4 42 Ricky
通过列表创建数据帧DataFrame
示例:
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data, index=['first', 'second'])
print(df1)
print(df2)
输出如下:
a b c
0 1 2 NaN
1 5 10 20.0
a b c
first 1 2 NaN
second 5 10 20.0
从系列的字典来创建DataFrame
import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(df)
输出如下:
one two
a 1.0 1
b 2.0 2
c 3.0 3
d NaN 4
列操作
data = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(data)
print(df ['one']) #选择列
#添加列
print ("Adding a new column by passing as Series:")
df['three']=pd.Series([10,20,30],index=['a','b','c'])
print df
print ("Adding a new column using the existing columns in DataFrame:")
df['four']=df['one']+df['three']
print(df)
#删除列
del df['one'] # 或者使用df.pop('one')
print(df)
输出如下:
a 1.0
b 2.0
c 3.0
d NaN
Name: one, dtype: float64
Adding a new column by passing as Series:
one two three
a 1.0 1 10.0
b 2.0 2 20.0
c 3.0 3 30.0
d NaN 4 NaN
two three
a 1 10.0
b 2 20.0
c 3 30.0
d 4 NaN
行操作
示例:
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(df.loc['b']) # 选择b那一行
print(df.iloc[2]) #通过整数位置选择
print(df[2:4] #行切片
print(df.loc[['a','b'],['one','two']]) # 同时通过标签选择行和列
输出如下:
one 2.0
two 2.0
Name: b, dtype: float64
one 3.0
two 3.0
Name: c, dtype: float64
one two
c 3.0 3
d NaN 4
one two
a 1.0 1
b 2.0 2
添加行
df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
df = df.append(df2) #添加df2到df
print(df)
df = df.drop(0) #删除索引为0的行
print(df)
输出如下:
a b
0 1 2
1 3 4
0 5 6
1 7 8
a b
1 3 4
1 7 8
5.常用属性和方法
编号 | 属性或方法 | 描述 |
---|---|---|
1 | axes | 返回索引(列) |
2 | dtype | 返回数据类型 |
3 | empty | 判断是否为空,为空则返回True |
4 | ndim | 返回维数 |
5 | size | 返回元素的个数 |
6 | values | 将元素作为ndarray类型返回 |
7 | shape | 返回形状 |
8 | T | 将DataFrame进行转置(Series没有) |
9 | head(n) | 返回前n行数据 |
10 | tail(n) | 返回最后n行数据 |
6.pands读写文件操作
pandas
最常用的一个功能就是在机器学习或深度学习研究过程中读取数据集,方便后续操作,下面将详细介绍一下其常用的文件读写方式。
-
读取excel文件
pd.read_excel()
用来读取excel文件,所涉及的常用方法参数如下:编号 参数 功能 1 io excel文件存储路径 2 sheet_name 要读取的工作表的名称 3 header 用哪一行作为列索引,默认第一行,即header=0 4 names 最终定义的列名 5 index_col 使用哪一列作为行索引,默认为0 6 usecols 读取表格中哪几列,必须是位置索引 7 encoding 默认是utf-8,也可以是gbk 8 skiprows 跳过特定行 9 nrows 读取多少行数据 10 engine 默认是C,如文件路径存在中文时,engine= “python” 示例:
import pandas as pd df = pd.read_excel(r"E:\code\demo.xlsx",sheet_nam = 0,index_col = 0,nrows = 5) print(df)
输出如下:
性别 年龄 省内省外 消费金额 贷款与否 用户id 1 男 60 1 311.0 0 2 NaN 25 1 220.0 1 3 男 47 1 246.0 0 4 女 52 0 NaN 0 5 女 21 0 916.0 0
-
读取csv文件
csv文件是以逗号为分隔符的文件,读取参数与excel基本类似,与excel的读取不一样的地方在于如遇到中文路径必须得设置engine参数;
文件为gbk格式的csv,若不设置encoding参数,会报错,并且文件路径带有中文,需要设置engine参数,不然也会报错;
pd.read_csv()
用来读取csv文件,常用参数如下:
file : 文件路径(绝对路径或者相对路径)
sep:类型为str。csv文件中每一行数据之间的分隔符。官方文档指出对于read_csv()这个参数默认是英文逗号,默认也是逗号。
剩余参数和pd.read_excel()
很类似,按照上面的参照用即可。示例:
df = pd.read_csv(r"E:\code\demo.csv",encoding = "gbk",engine = "python") print(df)
输出如下:
用户id 性别 年龄 省内省外 消费金额 贷款与否 0 1 男 60.0 1 311.0 0.0 1 2 NaN 25.0 1 220.0 1.0 2 3 男 47.0 1 246.0 0.0 3 4 女 52.0 0 NaN 0.0 4 5 女 21.0 0 916.0 0.0 5 6 男 37.0 0 980.0 1.0 6 7 男 34.0 0 482.0 1.0 7 8 男 NaN 0 267.0 0.0 8 9 女 50.0 1 NaN 0.0 9 10 男 20.0 1 265.0 1.0 10 11 男 51.0 1 612.0 0.0
-
读取txt文件
读取txt文件可以用
pd.read_table()
或者pd.read_csv()
,不过用read_csv()
时要指定sep = '\t'
为分隔符。 -
写入文件
写入txt,excel,csv这些文件大体相同,都是通过
pd.to_xxx()
完成,在这里仅用写入excel文件作为示例。
示例:df = pd.read_excel(r"D:\迅雷下载\示例.xlsx",sheet_nam = 0,nrows = 5) df.to_excel(r"E:\code\demo2.xlsx",index = False, columns = ["用户id","性别","消费金额","贷款与否"], encoding = "utf-8",sheet_name = "示例",na_rep = "Na",inf_rep = "Na") # na_rep表示缺失值填充,inf_rep表示无穷值填充
to_csv
时需要指定sep参数。