Series是一种类似于一维数组的对象,由一组数据(各种NumPy数据类型)以及一组与之对应的索引(数据标签)组成。
使用list创建Seriesimport numpy as np import pandas as pd arr1=pd.Series([1,2,3,4,5])使用dict创建series
arr3=pd.Serise({"name":["lisa","nana","lili"],"age":[18,19,20]})
使用ndarray创建series
arr2=pd.Series(np.arange(10))获取series的values与index
arr3.index arr3.values通过索引获取values
- 注意,使用不连续索引的时候,需要使用两个[]
arr1[1:4]布尔索引
arr1[[True,True,False,False,True,]]DataFrame
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同类型的值。DataFrame既有行索引也有列索引,数据是以二维结构存放的。
- 类似二维数组/表格数据 (如excel)
- 每列数据可以是不同的类型
- 索引包括列索引和行索引
df1=pd.DataFrame(np.arange(20).reshape(4,5))读取本地文件创建DataFrame的语法与参数解释
pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None,usecols=None, squeeze=False,dtype=None, engine=None,converters=None, true_values=None, false_values=None,skiprows=None, nrows=None, na_values=None, parse_dates=False,date_parser=None, thousands=None, comment=None, skipfooter=0,convert_float=True, **kwds)
- io,Excel的存储路径
- sheet_name,要读取的工作表名称
- header, 用哪一行作列名
- names, 自定义最终的列名
- index_col, 用作索引的列
- usecols,需要读取哪些列
- squeeze,当数据仅包含一列
- converters ,强制规定列数据类型
- skiprows,跳过特定行
- nrows ,需要读取的行数
- skipfooter , 跳过末尾n行
df2 = pd.read_excel("年度数据.xls",skiprows=2,skipfooter=2)
读取数据库数据创建DataFrame
import pymysql
conn = pymysql.connect(
user="root",
password='123456',
host="localhost",
database="zhilai0509",
port=3306)
df4 = pd.read_sql("select * from sale",conn)
获取DataFrame的index values columns
df4.index df4.values df4.columns指定行列索引名称 创建指定index的series
arr1=pd.Series([1,2,3,4],index=["one","two","three","four"])创建指定index和columns的DataFrame
pd.DataFrame([[1,2],[3,4],[5,6],[7,8]],index=["one","two","three","four"],columns=["a","b"])pandas的索引操作 指定行索引名称
df4["salesman"] df4[0:4]DataFrame的索引 列索引
- 在DataFrame中进行数据索引的时候,需要同时指定行索引与列索引,如果只传入了一个索引的话,默认是列索引
- 只索引一列,只有一对[]的话,返回值是一个series类型的对象
- 只索引一列,索引的时候,加两个[],返回值是一个DataFrame对象
df4["order_id"] df4[0:5] df4[df4["salesman"]==4] df4[df4["number"]>100]不连续索引
df4.loc[:,["order_id","brand","product"]]loc索引
- 通过标签选取数据,即通过index和columns的值进行选取。loc方法有两个参数,按顺序控制行列选取,范围包括start和end。
df4.loc[4:6,"order_id":"brand"] df4[df4.loc[:,"brand"]==39] df4.loc[::2,::2]iloc索引
- 通过行号选取数据,即通过数据所在的自然行列数为选取数据。iloc方法也有两个参数,按顺序控制行列选取。
df4.iloc[4:6,[0,1,4,6]]多条件布尔索引
- 多个条件之间使用&连接
- 每一个条件需要使用()包裹起来
df4[(df4["salesman"] >=6) & (df4["salesman"]<=12)] df4.loc[len(df4)-10:,["order_id","product","number"]]DataFrame的常用属性与方法 常用属性 df.shape 行数与列数
df4.shape
df.dtype 列的数据类型df4["order_id"].dtype
df.index 行索引df4.index
df.columns 列索引df4.columns
df.values 所有的值df4.values
df.ndim 数据的维度df4.ndim
df.size 查看元素个数df4.size
常用方法 series.unique()- 查看该series数据去重后的所有值
df4["salesman"].unique()df.head(n) 打印前几行
df4.head(10)
df.tail(n) 打印后几行df4.tail(10)
df.info() DataFrame信息概览df4.info()
字符串函数- pandas中所有的字符串函数,都str类下的方法
df[0].str.lower() # 所有字符小写
df[0].str.upper() # 所有字符大写
df[0].str.strip() # 去除前后两端的空白
df[0].str.lstrip() #去除字符串前端的空白
df[0].str.rstrip() #去除字符串后端的空白
df[0].str.split(‘’, n = 1, expand=False) # 按照指定字符进行拆分,n代表拆分多少次,expend代表是否生成新的列
df[0].str.replace(‘[d]+’, ‘’) # 第一个参数为需要替换的值,第二个参数为替换后的值,可以只用正则匹配
df[0].str.contains(‘w+’) # 判断字符串中是否包含某个值,可以使用正则匹配
df[0].str.match(‘w+’) # 从头开始匹配,类似re.match
order_id列所有字符大写df4["order_id"].str.upper()
将日期格式转为字符串格式df4["date"]=df4["date"].astype("str")
将date列按照-分列df4["date"].str.split("-",expand=True)
将date列2019替换成19df4["date"].str.replace("2019","19")
筛选order_id列不包含zh的df4[~df4["order_id"].str.contains("zh")]
- 语法结构Series.sort_values(ascending=True, inplace=False)
- 参数解释:
- ascending:默认为True升序排序,为False降序排序
- inplace:是否修改原始Series
arr1.sort_values(ascending=False,inplace=True)
- 语法结构:DataFrame.sort_values(by, ascending=True, inplace=False)
- 参数说明:
- by:字符串或者List<字符串>,单列排序或者多列排序
- ascending:bool或者List,升序还是降序,如果是list对应by的多列
- inplace:是否修改原始DataFrame
df4.sort_values(by=["number","salesman"])
- 语法:df.drop_duplicates(subset=['A','B'],keep='first',inplace=True)
- 参数含义:
- 代码中subset对应的值是列名,表示只考虑这两列,将这两列对应值相同的行进行去重。
- 默认值为subset=None表示考虑所有列。
- keep='first’表示保留第一次出现的重复行,是默认值。keep另外两个取值为"last"和False,
- 分别表示保留最后一次出现的重复行和去除所有重复行。
- inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本。
df1.drop_duplicates("salesman",keep="last")
- 代码中subset对应的值是列名,表示只考虑这两列,将这两列对应值相同的行进行去重。
df4.describe()
df4["salesman"].count()非 NA 值的数量
df4.min()
df4["number"].argmin()计算能够获取到最小值和最大值的索引位置(整数)
- 计算每一个值出现的次数
- value_counts()
df4["salesman"].value_counts()
df4["year"]=2019
df4["col1"]=[i for i in range(88071)]
- loc, # int型,表示第几列;若在第一列插入数据,则 loc=0
- column, # 给插入的列取名,如 column='新的一列’
- value, # 数字,array,series等
- allow_duplicates=False # 是否允许列名重复,选择Ture表示允许新的列名与已存在的列名重复。
df4.insert(loc=0,colume="行号",value=(df4["col1"]))



