目录
- Pandas的数据结构
- Series
- DataFrame
正文
Pandas的数据结构
- Pandas中引入了两种新的数据结构----Series、DataFrame和Panel。
- Series:一维数组,Series类型由一组数据及与之相关的数据索引组成。
- DataFrame:二维的表格型数据结构。可以将DataFrame理解为Series的容器。
- Panel:可以视为Excel的多表单Sheet
Series
- 用于存储一行或一列的数据,以及与之相关的索引的集合。Series([数据1,数据2,…],[index=[索引1,索引2,…]])
import pandas as pd
s=pd.Series([24,20,25,26,24])
print(s)
- 【运行结果】
- 输出结果数据有两列,右侧包含的实际数据,左侧是对应的索引。最后一行的dtype表明值的数据类型是64位整型。在没有明确定义index的情况下,自动生成一个从0开始的整数序列作为索引,称为位置索引
- 如果指定索引为数字整数,则位置访问失效。
>>>from pandas import Series
>>>X=Series(['a',2,'螃蟹'],index=[1,2,3])
>>>X[3] #通过索引访问
"螃蟹"
- 如果指定索引为非数字整数,则可以通过位置或者索引访问数据。
>>>X=Series(['a',2,'螃蟹'],index=['a','b','c']
>>>X['c'] #通过索引访问
'螃蟹'
>>>X[2] #通过位置访问(位置从0开始)
'螃蟹'
- Series类型的操作类似Python字典类型
- 自定义索引访问
- 使用.get()方法
>>>X=Series(['a',2,'螃蟹'],index=[1,2,3])
>>>X
1 a
2 2
3 螃蟹
dtype:object
>>>X[3]
'螃蟹'
>>>X[3]=8 #修改某索引对应的值
>>>X
1 a
2 2
3 8
dtype:object
DataFrame
- 是用于存储多行和多列的数据集合,是Series的容器。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)
- DataFrame格式:
pd.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False)
- DataFrame创建:
- 方法一:用嵌套列表来创建
import pandas as pd
stu=['小明','小红','小白','小小']
titles=['python','高数','英语']
df=pd.DataFrame([[100,90,98],[78,76,74],[55,56,58],[87,89,86]],index=stu,columns=titles)
print(df)
- 【输出结果】
- DataFrame构造函数的columns函数给出列的名字,index给出label标签
- 方法二:从列表的字典来创建,字典的键默认为列名。
import pandas as pd
data={
'name':['张三','李四','王五','小明'],
'sex':['female','female','male','male'],
'year':[2001,2001,2003,2002]
'city':['北京','上海','广州','北京']
}
df=pd.DataFrame(data)
print(df)
- 【输出结果】
- 方法三:从系列series的字典来创建,字典的键默认为列名,行索引默认从0开始。
>>>from pandas import DataFrame
>>>from pandas import Series
>>>df=DataFrame({'age':Series([26,29,24]),'name':Series(['Ken','Jerry','Ben'])})
>>>df
age name
0 26 Ken
1 29 Jerry
2 24 Ben
- 查看DataFrame数据的行索引、列名和数据
>>>df.index #行轴标签或行索引
RangeIndex(start=0,stop=3,step=1)
>>>df.columns #返回所有列名的列表
Index(['age','name'],dtype='object')
>>>df.values #实际数据,作为Numpy数组返回
array([[26,'Ken'],[29,'Jerry'],[24,'Ben']],dtype=object)
- 查看DataFrame数据的行数和列数、数据类型
>>>df.shape #元组,表示行数和列数
(3,2)
>>>df.dtypes #查询各列数据类型
age int64
name object
dtype:object
>>>df['age'].dtypes #查询某列数据类型
dtype('int64')
>>>df['age']=df['age'].astype(str) #类型转换
- DataFrame数据导入
数据存在的形式多样,有文件(csv、excel、txt)和数据库(mysql、access、sql server)等形式。
导入csv文件:
read_csv(file,names=[列名1,列名2,..],sep=" ",...)
#file:文件路径文件名
#names:列名,默认为文件中的第一行作为列名
#sep:分隔符,默认是逗号
#encoding='GBK'
#index_col=0
>>>import pandas as pd
>>>rcsv=pd.read_csv(r"d:\gdp.csv")
>>>print(rcsv.head())
country gdp
0 美国 5433.00
1 英国 723.28
2 法国 626.51
3 中国 597.16
4 日本 443.07
- 导入excel文件:pip install xlrd xlwt
pip install openpyxl
read_excel(file,sheetname,header=0)
#file:文件路径文件名
#sheetname:sheet的名字,如:sheet1
#header:列名,默认0为文件的第一行作为列名,布尔型0和1
>>>import pandas as pd
>>>ranktable=pd.read_excel(r"D:\sjcltest.xlsx",'成绩单')
>>>print(ranktable.shape)
(496,24)
>>>print(ranktable.columns)
index(['学号','姓名','平时成绩','期末成绩','总成绩','100~90','89~80','79~70','69~60','60分以下','100~90.2','89~80.1','79~70.1','69~60.1','60分以下.1','100~90.2','89~80.2','79~70.2','69~60.2','60分以下.2','平时成绩.1','卷面成绩','总成绩.1','abs(平时-期末)<10'],dtype='object')
>>>print(ranktable.index)
Rangeindex(start=0,stop=496,step=1)
#用openpyxl代替xlrd打开.xlsx文件,
#df=pd.read_excel(r"e:\2019大学计算机\sciltest.xlsx",'成绩单',engine=openpyxl')
- DataFrame数据导出
- 导出csv文件:
to_csv(file_path,sep=",",index=TRUE,header=TURE)
#file_path:文件路径
#sep:分隔符,默认是逗号
#index:是否导出行序号,默认是TURE,导出行序号
#header:是否导出列名,默认TURE导出列名
age name
0 26 Ben
1 85 John
2 64 Jerry
df.to_csv('e:\\01.csv') #默认带上index
df.to_csv('e:\\02.csv',index=False) #无index
- 导出excel文件:
to_excel(file_path,index=TRUE,header=TURE)
#file_path:文件路径
#index:是否导出行序号,默认是TRUE,导出行序号
#header:是否导出列名,默认TRUE导出列名
df.to_excel('e:\\01.xlsx') #默认带上index
df.to_excel('e:\\02.xlsx',index=False) #无index
知识点整理不易,如果对你有帮助,给个免费的赞支持一下吧!感谢阅读!