pandas的数据结构和基本功能
Series对象
利用pd.Series函数生成series对象
#series对象相当于一维数组
import pandas as pd
a=pd.Series([1,2,3]) #dtype为int64
a=pd.Series(["1","2","3"]) #dtype为object
series对象的切片
a=pd.Series(np.arange(10))
a[0::3] #前两个参数是范围,左包含右不包含,第三个参数是步长
x1=pd.Series(np.arange(4),index=list("abcd"))
x1["a":"c"] #当参数不是数字时,左右都包含
布尔索引
a=pd.Series(np.random.uniform(-1,1,10)) #从(-1,1)的均匀分布中随机抽取10个数
a[a>0.3]#返回布尔值为True对应的value
astype方法,series类型转换
series1=pd.Series(np.arange(10))
series1.astype(str) #将整数变成字符串
c=pd.Series(['1','2','a'])
c.astype(np.float,errors='ignore')
#参数errors有两个可能取值,一个是"raise",一个是"ignore"。
#raise 如果在转化过程中出现错误, 则抛出一个错误提示,并停止程序执行。
#"ignore" 如果在转化过程中出现错误,则忽略这个错误,如果出现转化错误,则series的类型为object
series类型转换–pd.to_numeric方法
有时候会涉及到将 object 类型转为其他类型,常见的有转为数字、日期、时间差,Pandas 中分别对应 to_numeric、to_datetime、to_timedelta 方法。
series1=pd.Series(["1","2","a"])
pd.to_numeric(series1,errors="coerce") #其他类型转化为数字
#errors参数有三个可能取值,分别是'ignore', 'raise', 'coerce'(强迫), 默认的取值是 'raise'.
series对象的map方法
#将字符串转化为float
series2=pd.Series(["1","2","a"])
def f1(x):
try:
a=float(x)
except:
a=np.nan
return a
series2.map(f1)
#Series对象的运算,类型必须相同
series1=pd.Series([1,2,3])
series1.map(lambda x:x+2)
DataFrame(数据框)对象
数据框对象的生成
pd.DataFrame–数据框对象的手动生成
data1=pd.DataFrame(np.arange(24).reshape(6,4),columns=["a",1,"c","e"])
data1
#字典形式
data2=pd.DataFrame({
"x":np.random.rand(5),"y":np.random.rand(5)})
data2
pd.read_csv----外部文件读取
#导入CSV文件,如果代码和导入的文件在一个路径下,直接写文件名,如果路径不同,导入时注意用双斜杠
pd.read_csv('working.csv',encoding='GBK')
#UTF-8是国际编码,GBK是国内编码
pd.read_excel----外部文件读取
这个函数的参数非常多,一般情况下保持默认就可以
#当删除第一行大标题后,变量的名字就变成了第一行,索引值为0
a=pd.read_excel('chapter3_1.xls',sheet_name='Sheet1',nrows=10,skiprows=1,header=0)
#导入某个Excel文件中第一个表的10行数据,不包含标题,跳过大标题,变量名索引值变成了0
查看数据框基本信息(info方法)
data1.info()
查看前/后几条信息(head,tail方法)
data1.head() #如果省略括号内的参数,则显示前五行
data1.tail(3) #如果省略括号内的参数,则显示后五行
查看数据框的形状——shape属性
data1.shape #返回一个元组
values、columns、index属性
data1.values #返回的是一个ndarray实例
data1.columns #返回的是一个类似的一维数组,是变量名
data1.index #返回索引值的范围
数据框对象的转置
data1.T
数据框对象的索引和切片
#切取一列或几列
data1=pd.DataFrame(np.arange(12).reshape(3,4),columns=["a",1,"c","e"] )
#如果列名是字符串则有如下两种方式把列调出来
#方法一
data1["a"]
#方法二
data1.a
#如果列名是数字则只能采用第一种方式进行切片
data1[["a","c"]] #切取a和c列
#切取一行或者几行
data1[0:0]
#切取第0行,注意不要写成data1[0],会有错误提示
data1[0:3] #切取前三行
loc方法:显式索引
data1=pd.DataFrame(np.random.rand(4,3),columns=["x1","x2","x3"] ,index=["a","b","c","d"])
#语法 data1.loc[索引行,索引列 ]
data1.loc[:,"x1":"x3"] #索引列名为x1,x3的所有行
data1.loc[["a","b","c"],["x1","x2","x3"]]
#注意方括号内第一个参数是行标签列表,切取不连续的行和列
data1.loc["a":"b","x1":"x3"]
#切取连续的行和列,注意使用显式索引的时候,冒号右侧的列或行是包含的
iloc方法:隐式索引
使用 iloc 也就是 index_loc 这种方式不看你的行索引和列索引是什么名称, 只看数据是处于表中的一个什么位置.
data1=pd.DataFrame(np.random.rand(4,3),columns=["x1"