pandas两个数据结构Series与DataFrame使用

seires 对象

1.创建一个series对象 Series()

语法:s=pd.Series(data,index=index)

参数说明:

data:表示数据,支持Python字典、多维数组、标量值(即只有大小,没有方向的量。也就是说,只是一个数值,如s=pd.Series(5))

index:表示行标签(索引)

返回值:Series对象

注意:data参数是多维数组时,index的长度必须与data长度一致,如果没有指定index参数,会自动创建数值型索引(从0~data数据长度-1)

2.手动设置series索引

手动设置series索引通过index参数设置,index=[]

3.series位置索引

位置索引是从0开始的,以此类推

import pandas as pd
s1=pd.Series([88,60,75])
print(s1[0])

运行结果 :88

注意:series不能使用[-1]定位索引

4.series标签索引

Series标签索引与位置索引方法类似,用[ ]表示,里面是索引名称,注意index的数据类型是字符串,如果需要获取多个标签索引值,用[[ ]]表示

5.series切片索引

用标签索引做切片,包头包尾(即包含索引开始位置的数据,也包含索引结束位置的数据)

用位置索引做切片,和list列表用法一样,包头不包尾(即包含索引开始位置的数据,不包含索引结束位置的数据)

s2=pd.Series([88,60,75,34,68])
print(s2[1:4])

运行结果:1 60 2 75 3 34

6.获取series索引和值

获取Series索引和值主要使用Series的index和values方法

import pandas as pd
s1=pd.Series([88,60,75])
print(s1.index)
print(s1.values)

运行结果:RangeIndex(start=0, stop=3, step=1) [88 60 75]

DataFrame对象

1.创建一个DataFrame对象

语法:pandas.DataFrame(data,index,columns,dtype,copy)

参数说明:

data:表示数据,可以是ndarray数组、Series对象、列表、字典等。

index:表示行标签(索引)。

columns:列标签(索引)。

dtype:每一列数据的数据类型,其与Python数据类型有所不同,如object数据类型对应的是Python的字符型

通过二维数组创建数据

data=[[1,2,3,4],[3,4,5,6],[4,5,6,7]]
index=[0,1,2]
columns=['语文','数学','英语','地理']
df=pd.DataFrame(data=data,index=index,columns=columns)
df

通过字典创建

pd.DataFrame({columns:[data数据]},index=[])

pd.set_option('display.unicode.east_asian_width',True)
df=pd.DataFrame({
    '语文':[110,106,88],
    '数学':[65,57,43],
    '英语':[78,89,90]
},index=[0,1,2])
df

注意:字典中的value值只能是一维数组或单个的简单数据类型,如果是数组,要求所有数组长度一致;如果是单个数据,则每行都添加相同数据。

2.导入外部数据

1.导入.xls或.xlsx文件 导入Excel文件 read_excel()

参数:

io:字符串,.xls或.xlsx文件路径或类文件对象。

sheet_name:None、字符串、整数、字符串列表或整数列表,默认值为0。字符串用于工作表名称,整数为索引表示工作表位置,字符串列表或整数列表用于请求多 个工作表,为None时获取所有工作表

header:指定作为列名的行,默认值为0,即取第一行的值为列名。数据为除列名以外的数据;若数据不包含列名,则设置header=None。

names:默认值为None,要使用的列名列表。

index_col:指定列为行索引,默认值为None,索引0是DataFrame的行标签。

usecols:int、list列表或字符串,默认值为None。 如果为None,则解析所有列。 如果为int,则解析最后一列。 如果为list列表,则解析列号列表的列。 如果为字符串,则表示以逗号分隔的Excel列字母和列范围列表(例如”A:E”或”A,C,E:F”)。范围包括双方。

df2=pd.read_excel('1.xlsx',usecols=['姓名','生日','班级'])
df2

pandas两个数据结构Series与DataFrame使用

squeeze:/skwiːz/ 布尔值,默认值为False,如果解析的数据只包含一列,则返回一个Series。

dtype:列的数据类型名称或字典,默认值为None。例如{‘a’:np.float64,’b’:np.int32}。

nrows:/rəʊz/导入前多少行

skiprows:省略指定行数的数据,从第一行开始。

skipfooter:省略指定行数的数据,从尾部数的行开始

df2=pd.read_excel('1.xlsx',sheet_name=1)
df2

2. 导入.csv文件 .txt文件 read_csv()

常用参数说明:

filepath_or_buffer:字符串,文件路径,也可以是URL链接。

sep、delimiter:字符串,分隔符。

header:指定作为列名的行,默认值为0,即取第1行的值为列名。数据为除列名以外的数据;若数据不包含列名,则设置header=None。

names:默认值为None,要使用的列名列表。

index_col:指定列为索引列,默认值为None,索引0是DataFrame的行标签。

usecols:int、list列表或字符串,默认值为None。 如果为None,则解析所有列。 如果为int,则解析最后一列。 如果为list列表,则解析列号列表的列。 如果为字符串,则表示以逗号分隔的Excel列字母和列范围列表(例如”A:E”或”A,C,E:F”)。范围包括双方。 dtype:列的数据类型名称或字典,默认值为None。例如{‘a’:np.float64,’b’:np.int32}

parse_dates:布尔类型值、int类型值的列表、列表或字典,默认值为False。可以通过parse_dates参数直接将某列转换成datetime64日期类型。例如,df1=pd.read_csv(‘1月.csv’, parse_dates=[‘订单付款时间’])。

parse_dates为True时,尝试解析索引。

parse_dates为int类型值组成的列表时,如[1,2,3],则解析1、2、3列的值作为独立的日期列。

parse_date为列表组成的列表,如[[1,3]],则将1、3列合并,作为一个日期列使用。

df=pd.read_csv('data.csv',encoding='gbk',parse_dates=[0,1,2,3])
df

parse_date为字典时,如{‘总计’:[1, 3]},则将1、3列合并,合并后的列名为”总计”。

encoding:字符串,默认值为None,文件的编码格式。Python常用的编码格式是UTF-8。 中文编码:’gbk’

df=pd.read_csv('data.csv',encoding='gbk')
df

3.导入html文件 read_html()

常用参数说明:

io:字符串,文件路径,也可以是URL链接。网址不接受https,可以尝试去掉https中的s后爬取

match:正则表达式,返回与正则表达式匹配的表格。

flavor:/ˈfleɪvə(r)/解析器默认为lxml。

header:指定列标题所在的行,列表list为多重索引。

index_col:指定行标题对应的列,列表list为多重索引。

encoding:字符串,默认为None,文件的编码格式。

2.数据抽取 loc()和iloc()

区别:

loc属性:以列名(columns)和行名(index)作为参数,当只有一个参数时,默认是行名,即抽取整行数据,包括所有列

iloc属性:以行和列位置索引(即0,1,2,…)作为参数,0表示第1行,1表示第2行,以此类推。当只有一个参数时,默认是行索引,即抽取整行数据,包括所有列

抽取多行数据

通过loc属性和iloc属性指定行名和行索引即可实现抽取任意多行数据

df1=df.loc[['小明','小兰']]
df1
df1=df.iloc[[0,2]]
df1

如果想要连续的抽取多行数据,使用”:”

df1=df.loc['小明':'小兰']
df1

抽取指定行和列

df.loc/iloc[行,列],如果想要获取所有行或者列,可以使用:获取

df1=df[['语文','数学']]
df1
df1=df.loc[:,['语文','数学']]
df1
df1=df.iloc[:,[0,2]]
df1

按指定条件抽取数据

df1=df.loc[(df['语文']>100)&(df['数学']>80)]
df1

3.数据的增加、修改和删除

1.1增加数据

按列增加数据 :

(1)直接位DataFrame对象赋值

(2)使用loc属性在DataFrame对象的最后一列增加一条数据

(2)在指定位置插入一列 insert()方法 df.insert(添加位置的索引,列名,要插入的数据)

按行添加数据

df1=df.loc['钱多多']=[100,90,98,89,87,78]
df

按行增加数据:

(1)增加一行,直接赋值

(2)增加多行数据,append()

1.2 修改数据

修改行标题 columns

(1)直接给要修改的数据赋值即可,即使修改一条数据,也要将所有的列标题全部写上

(2)rename()方法修改标题

参数inplace为True,表示直接修改df,否则,修改的只是返回后的数据

df1=df.rename(columns={'语文':'语文(上)'},inplace=True)
df

修改列标题 index

(1)直接给index赋值

df.loc['小红']=[98,98,87,76,67,56]
df

(2)使用rename()

df1=df.rename({'小明':'趣多多'},axis=0,inplace=True)
df

修改数据 使用loc和iloc属性

1.3删除数据 drop()

参数说明:

labels:表示行标签或列标签。

axis:axis = 0,表示按行删除;

axis = 1,表示按列删除。

默认值为0,即按行删除。

index:删除行,默认值为None。

columns:删除列,默认值为None。

level:针对有两级索引的数据。level = 0,表示按第1级索引删除整行;level = 1表示按第2级索引删除整行,默认值为None。 inplace:可选参数,对原数组做出修改并返回一个新数组。默认值为False,如果值为True,那么原数组直接就被替换。

errors:参数值为ignore或raise,默认值为raise,如果值为ignore(忽略),则取消错误。

参数inplace为True,表示直接修改df,否则,修改的只是返回后的数据

df1=df.drop(index=df[df['画画']==98].index,inplace=True)
df

4.数据清洗

1.1缺失值查看处理

缺失值查看 info( ) isnull() notnull()

1.2缺失值删除处理 dropna()

how=’all’,删除所有空行

df.dropna(how='all',inplace=True)
df

1.3缺失值填充处理 fillna()

将NaN填充为0

df['第一周']=df['第一周'].fillna(0)
df

1.4重复值处理 drop_duplicates()

(1)判断是否重复 duplicated()

(2)去除全部的重复数据 drop_duplicates() 默认保留一行

(3)去除指定列的重复数据 drop_duplicates([‘列名’])

(4)保留重复行中的最后一行drop_duplicates([‘行名’],keep=’last’)

keep有三个值,keep=first,表示保留第一次出现的重复行

keep为另外两个取值,即last和False时,分别表示保留最后一次出现的重复行和去除所有重复行

(5)直接删除,保留一个副本

inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示删除重复项后生成一个副本

异常值的检测与处理

检测方法:

(1)给定一个范围进行判断,不在范围内的视为异常值

(2)均方差

(3)箱型图

数值替换 replace() where()

to_repalce:指定需要替换的原值,可以是字符型,正则表达式,列表,series,整数,浮点数或None,例如{‘V1′:n1,’v2’:n2}表示使用n1,n2替换掉原来的v1,v2,这时的value必须为None

value:指定用于替换的新值

inplace:True修改原始数据,False仅修改视图

limit:限制向前,向后填充的最大个数

regex:默认False,若为True则to_palce必须为一个字符串

注意:where()替换的是不满足条件的数据

5.索引设置

索引作用:更加方便的查找数据,提升查询性能

1.1重新设置索引 reindex()

常用参数说明:

labels:标签,可以是数组,默认值为None(无)。

index:行索引,默认值为None。

columns:列索引,默认值为None。

axis:轴,axis=0表示行,axis=1表示列。默认值为None。

method:默认值为None,重新设置索引时,选择插值(一种填充缺失数据的方法)方法,其值可以是None、bfill/backfill(向后填充)、ffill/pad(向前填充)等。

fill_value:缺失值要填充的数据。如缺失值不用NaN填充,而用0填充,则设置fill_value=0即可

1.2对Series对象重新设置索引 reindex()

reindex()方法根据新索引进行了重新排序,并且对缺失值自动填充NaN。如果不想用NaN填充,则可以为fill_value参数指定值,如0

而对于一些有一定顺序的数据,我们可能需要插值(插值是一种填充缺失数据的方法)来填充缺失的数据,可以使用method参数

method=’ffill’向前填充

method=’bfill’向后填充

1.3对DataFrame对象重新设置索引 reindex()

对于DataFrame对象,reindex()方法用于修改行索引和列索引

1.4设置某列为行索引 set_index()

drop=True 会保留索引值, drop=False会删除索引值

如果要重新设置索引可以使用reset_index()方法,在删除缺失数据后重新设置索引

6.数据的排序和排名

1.1数据排序 sort_values()

sort_values()方法可以根据指定行/列进行排序

参数说明:

by:要排序的名称列表。

axis:轴,axis=0表示行,axis=1表示列。默认值为0,即按行排序。

ascending:升序或降序排序,布尔值,指定多个排序可以使用布尔值列表。默认值为True。

inplace:布尔值,默认值为False,如果值为True,则就地排序。

kind:指定排序算法,值为quicksort(快速排序)、mergesort(混合排序)或heapsort(堆排),默认值为quicksort。

na_position:空值(NaN)的位置,值为first空值在数据开头,值为last空值在数据最后,默认值为last。

ignore_index:布尔值,是否忽略索引,值为True标记索引(从0开始按顺序的整数值),值为False则忽略索引

df1=df.sort_values(by='销量',ascending=False)
df1

1.2按多列数据排序

多列排序是按照给定列的先后顺序进行排序的 by

df1=df.sort_values(by=['图书名称','销量'])
df

1.3按行数据排序

按行排序的数据类型要一致,否则会出现错误提示

数据排名 rank()

参数说明:

axis:轴,axis=0表示行,axis=1表示列。默认值为0,即按行排序。

method:表示在具有相同值的情况下所使用的排序方法。设置值如下。

average:默认值,平均排名。

min:最小值排名。

max:最大值排名。

first:按值在原始数据中的出现顺序分配排名。

df['最小值排名']=df['销量'].rank(method="min",ascending=False)
df

dense:密集排名,类似最小值排名,但是排名每次只增加1,即排名相同的数据只占一个名次

numeric_only:对于DataFrame对象,如果设置值为True,则只对数字列进行排序。

na_option:空值的排序方式,设置值如下。

keep:保留,将空值等级赋值给NaN值。

top:如果按升序排序,则将最小排名赋值给NaN值。

bottom:如果按升序排序,则将最大排名赋值给NaN值。

ascending:升序或降序排序,布尔值,指定多个排序可以使用布尔值列表。默认值为True。

pct:布尔值,是否以百分比形式返回排名。默认值为False

Pandas统计分析

数据计算

1.1求和函数sum()

参数说明:

axis:axis=1表示行,axis=0表示列,默认值为None(无)。

skipna:布尔型,表示计算结果是否排除NaN/Null值,默认值为None。

level:表示索引层级,默认值为None。

numeric_only:仅数字,布尔型,默认值为None。

min_count:表示执行操作所需的数目,整型,默认值为0。

**kwargs:要传递给函数的附加关键字参数

返回值:返回Series对象或DataFrame对象

1.2求均值(mean()函数)

参数说明:

axis:axis=1表示行,axis=0表示列,默认值为None(无)。

skipna:布尔型,表示计算结果是否排除NaN/Null值,默认值为None。

level:表示索引层级,默认值为None。

numeric_only:仅数字,布尔型,默认值为None。

kwargs:要传递给函数的附加关键字参数。

返回值:返回Series对象或DataFrame对象

1.3求最大值 max()

参数说明:

**axis:axis=1表示行,axis=0表示列,默认值为None(无)。

skipna:布尔型,表示计算结果是否排除NaN/Null值,默认值为None。

**level:表示索引层级,默认值为None。

**numeric_only:仅数字,布尔型,默认值为None。

kwargs:要传递给函数的附加关键字参数。

1.4求最小值 min()

参数说明:

**axis:axis=1表示行,axis=0表示列,默认值为None(无)。 skipna:布尔型,表示计算结果是否排除NaN/Null值,默认值为None。

**level:表示索引层级,默认值为None。

**numeric_only:仅数字,布尔型,默认值为None。

kwargs:要传递给函数的附加关键字参数

1.5求中位数 median()

参数说明:

**axis:axis=1表示行,axis=0表示列,默认值为None(无)。 skipna:布尔型,表示计算结果是否排除NaN/Null值,默认值为None。

**level:表示索引层级,默认值为None。

**numeric_only:仅数字,布尔型,默认值为None。

kwargs:要传递给函数的附加关键字参数。

返回值:返回Series对象或DataFrame对象

1.6求众数 mode()

axis:axis=1表示行,axis=0表示列,默认值为0。

numeric_only:仅数字,布尔型,默认值为False。如果值为True,则仅适用于数字列。

dropna:是否删除缺失值,布尔型,默认值为True

1.7求方差 var()

参数说明:

axis:axis=1表示行,axis=0表示列,默认值为None(无)。 skipna:布尔型,表示计算结果是否排除NaN/Null值,默认值为None。

level:表示索引层级,默认值为None。

ddof:整型,默认值为1。自由度,计算中使用的除数是N-ddof,其中N表示元素的数量。

numeric_only:仅数字,布尔型,默认值为None。

kwargs:要传递给函数的附加关键字参数

1.8标准差 std()

std()函数的参数与var()函数一样

1.9 求分位数quantile()

参数说明:

q:浮点型或数组,默认为0.5(50%分位数),其值为0~1。

axis:axis=1表示行,axis=0表示列。默认值为0。

numeric_only:仅数字,布尔型,默认值为True。

interpolation:内插值,可选参数[{‘linear’,’lower’,’higher’,’midpoint’,’nearest’}]用于指定要使用的插值方法,当期望的分位数为数据点i~j时。

linear:i+(j-i)×分数,其中分数是指数被i和j包围的小数部分。

lower:i。

higher:j。

nearest:i或j二者以最近者为准。

midpoint:(i+j)/2。

数据格式化

设置小数位数 round()

该函数可以实现四舍五入,而它的decimals参数则用于设置保留小数的位数,设置后数据类型不会发生变化,依然是浮点型

参数说明:

decimals:每一列四舍五入的小数位数,整型、字典或Series对象。如果是整数,则将每一列四舍五入到相同的位置。否则,将字典和Series舍入到可变数目的位置;如果小数是类似于字典的,那么列名应该在键中;如果小数是级数,列名应该在索引中。没有包含在小数中的任何列都将保持原样。非输入列的小数元素将被忽略。

args:附加的关键字参数。

kwargs:附加的关键字参数

自定义函数:为DataFrame对象中的各个浮点数保留两位小数

df.applymap(lambda x:’%.2f’%x)

设置百分比 apply() map() format()

利用自定义函数将数据进行格式化处理,处理后的数据就可以从浮点型转换成带指定小数位数的百分比数据

设置千位分隔符

注意:设置千位分隔符后,对于程序来说,这些数据将不再是数值型,而是数字和逗号组成的字符串,如果由于程序需要再变成数值型就会很麻烦,因此设置千位分隔符要慎重

数据分组统计

分组统计 groupby()

groupby()函数用于将数据按照一列或多列进行分组,一般与计算函数结合使用,实现数据的分组统计

语法: DataFrame.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=False,observed=False)

参数说明:

by:映射、字典或Series对象、数组、标签或标签列表。如果by是一个函数,则对象索引的每个值都调用它;如果传递了一个字典或Series对象,则使用该字典或Series对象值来确定组;如果传递了数组ndarray,则按原样使用这些值来确定组。

axis:axis=1表示行,axis=0表示列。默认值为0。

level:表示索引层级,默认值为None(无)。

as_index:布尔型,默认值为True,返回以组标签为索引的对象。

sort:对组进行排序,布尔型,默认值为True。

group_keys:布尔型,默认值为True,调用apply()函数时,将分组的键添加到索引以标识片段。

squeeze:布尔型,默认值为False。如果可能,减少返回类型的维度;否则返回一致类型。

observed: bool, default False 布尔型, 观察者, 默认为False。当以石斑鱼为分类时,才会使用该参数。如果参数值为True,则仅显示分类石斑鱼的观测值;如果参数值为False,则显示分类石斑鱼的所有值。

按照多列分组,就用[]包裹写多个列即可

对分组数据进行迭代

for name,group in df.groupby(‘分类’):

print(name)

print(group)

name是groupby()函数中”一级分类”的值,group是分组后的数据。如果groupby()函数对多列进行分组,那么需要在for循环中指定多列。

聚合函数 agg()

主要通过groupby()函数与agg()函数实现,可以同时进行多个操作

数据移位 shift()

语法:DataFrame.shift(periods=1, freq=None, axis=0)

参数说明:

periods:表示移动的幅度,可以是正数,也可以是负数,默认值是1,1表示移动一次。注意这里移动的都是数据,而索引是不移动的,移动之后是没有对应值的,赋值为NaN。

freq:可选参数,默认值为None,只适用于时间序列,如果这个参数存在,那么会按照参数值移动时间索引,而数据值没有发生变化。

axis:axis=1表示行,axis=0表示列。默认值为0

数据转换

一列数据转换为多列数据 split()

语法:Series.str.split(pat=None, n=-1, expand=False)

参数说明:

pat:字符串、符号或正则表达式,字符串分割的依据,默认以空格分割字符串。

n:整型,分割次数,默认值是-1,0或-1都将返回所有拆分。

expand:布尔型,分割后的结果是否转换为DataFrame,默认值是False

join()方法与split()方法结合

以逗号分隔多种产品数据

df = df.join(df[‘宝贝标题’].str.split(‘, ‘, expand=True))

将DataFrame中的tuple(元组)类型数据分隔成多列

使用apply()函数对元组进行分隔

行列转换 stack()

stack()方法

将原来的 列索引转换成最内层的行索引

DataFrame.stack(level=-1, dropna=True)

参数说明:

level:索引层级,定义为一个索引或标签,或索引或标签列表,默认值是-1。

dropna:布尔型,默认值是True

unstack()方法

unstack()方法与stack()方法相反,它是stack()方法的逆操作,即将最内层的行索引转换成列索引

语法:

DataFrame.unstack(level=-1, fill_value=None)

参数说明:

level:索引层级,定义为一个索引或标签,或索引或标签列表,默认值是-1。

fill_value:整型、字符串或字典,如果unstack()方法产生丢失值,则用这个值替换NaN。

pivot()方法

pivot()方法针对值进行操作

语法:

DataFrame.pivot(index=None, columns=None, values=None)

参数说明:

index:字符串或对象,可选参数。列用于创建新DataFrame数据的索引。如果没有,则使用现有索引。

columns:字符串或对象,列用于创建新DataFrame的列。

values:列用于填充新DataFrame的值,如果未指定,则将使用所有剩余的列,结果将具有分层索引列

DataFrame转换为字典 to_dict()

DataFrame转换为字典主要使用DataFrame对象的to_dict()方法,以索引作为字典的键(key),以列作为字典的值(value)

DataFrame转换为列表 tolist()

DataFrame转换为元组 tuple()

Excel转换为HTML网页格式 to_html()

首先使用read_excel()方法导入Excel文件,然后使用to_html()方法将DataFrame数据导出为HTML格式,这样便实现了Excel转换为HTML格式

数据合并

数据合并 merge()

语法:

pandas.merge(right,how=’inner’,on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort= False,suffixes=(‘ _x’,’_y’),copy=True,indicator=False,validate=None)

参数说明:

right:合并对象,DataFrame对象或Series对象。

how:合并类型,参数值可以是left(左合并)、right(右合并)、outer(外部合并)或inner(内部合并),默认值为inner。各个值的说明如下。

left:只使用来自左数据集的键,类似于SQL左外部联接,保留键的顺序。

right:只使用来自右数据集的键,类似于SQL右外部联接,保留键的顺序。

outer:使用来自两个数据集的键,类似于SQL外部联接,按字典顺序对键进行排序。

inner:使用来自两个数据集的键的交集,类似于SQL内部连接,保持左键的顺序。

on:标签、列表或数组,默认值为None。DataFrame对象连接的列或索引级别名称。也可以是DataFrame对象长度的数组或数组列表。

left_on:标签、列表或数组,默认值为None。要连接的左数据集的列或索引级名称,也可以是左数据集长度的数组或数组列表。

right_on:标签、列表或数组,默认值为None。要连接的右数据集的列或索引级名称,也可以是右数据集长度的数组或数组列表。 left_index:布尔型,默认值为False。使用左数据集的索引作为连接键。如果是多重索引,则其他数据中的键数(索引或列数)必须匹配索引级别数。

right_index:布尔型,默认值为False,使用右数据集的索引作为连接键。

sort:布尔型,默认值为False,在合并结果中按字典顺序对连接键进行排序。如果值为False,则连接键的顺序取决于连接类型how参数。

suffixes:元组类型,默认值为(‘ _x’,’_y’)。当左侧数据集和右侧数据集的列名相同时,数据合并后列名将带上” _x”和”_y”后缀。

copy:是否复制数据,默认值为True。如果值为False,则不复制数据。

indicator:布尔型或字符串,默认值为False。如果值为True,则添加一个列以输出名为_Merge的DataFrame对象,其中包含每一行的信息。如果是字符串,将向输出的DataFrame对象中添加包含每一行信息的列,并将列命名为字符型的值。

validate:字符串,检查合并数据是否为指定类型。可选参数,其值说明如下。 one_to_one或”1:1″:检查合并键在左、右数据集中是否都是唯一的。 one_to_many或”1:m”:检查合并键在左数据集中是否唯一。 many_to_one或”m:1″:检查合并键在右数据集中是否唯一。 many_to_many或”m:m”:允许,但不检查

数据合并 concat()

语法:

pandas.concat(objs,axis=0,join=’outer’,ignore_index: bool = False, keys=None, levels=None, names=None, verify_integrity: bool = False, sort: bool = False, copy: bool = True)

参数说明:

objs:Series、DataFrame或Panel对象的序列或映射。如果传递一个字典,则排序的键将用作键参数。

axis:axis=1表示行,axis=0表示列。默认值为0。

join:值为inner(内连接)或outer(外连连接),处理其他轴上的索引方式。默认值为outer。

ignore_index:布尔值,默认值为False,保留索引,索引值为0,…,n-1。如果值为True,则忽略索引。

keys:序列,默认值为None。使用传递的键作为最外层构建层次索引。如果为多索引,应该使用元组。

levels:序列列表,默认值为None。用于构建MultiIndex的特定级别(唯一值);否则,它们将从键推断。

names:list列表,默认值为None。结果层次索引中的级别的名称。

verify_integrity:布尔值,默认值为False。检查新连接的轴是否包含重复项。

sort:布尔值,默认值为True(1.0.0以后版本默认值为False,即不排序)。如果连接为外连接(join=’outer’),则对未对齐的非连接轴进行排序;如果连接为内连接(join=’inner’),则该参数不起作用。

copy:是否复制数据,默认值为True,如果值为False,则不复制数据

(1)表结构相同的数据直接合并,表首尾相接

(2)当合并的数据列名不一致时,可以设置参数axis=1,concat()将数据对齐,然后进行合并,缺失的数据用NaN填充

(3)交叉合并,在代码中加上join参数,如果值为inner,结果是两张表的交集,如果值是outer,

结果是两张表的并集

数据导出

导出.xlsx文件 to_excel()

参数说明:

excel_writer:字符串或ExcelWriter对象。

sheet_name:字符串,默认值为Sheet1,包含DataFrame的表的名称。

na_rep:字符串,默认值为’ ‘。缺失数据的表示方式。

float_format:字符串,默认值为None,格式化浮点数的字符串。

columns:序列,可选参数,要编辑的列。

header:布尔型或字符串列表,默认值为True。列名称,如果给定字符串列表,则表示它是列名称的别名。

index:布尔型,默认值为True,行名(索引)。

index_label:字符串或序列,默认值为None。如果需要,可以使用索引列的列标签;如果没有给出,标题和索引为True,则使用索引名称;如果数据文件使用多索引,则需使用序列。

startrow:指定从哪一行开始写入数据。

startcol:指定从哪一列开始写入数据。

engine:字符串,默认值为None,指定要使用的写引擎,如openpyxl或xlsxwriter。也可以通过io.excel.xlsx.writer、io.excel.xls.writer和io.excel.xlsm.writer进行设置。

merge_cells:布尔型,默认值为True。

encoding:指定Excel文件的编码方式,默认值为None。

inf_rep:字符串,默认值为”正”,表示无穷大。

verbose:布尔型,默认值为True。在错误日志中显示更多信息。

freeze_panes:整数的元组,长度2,默认值为None。指定要冻结的行列

导出csv文件 to_csv()

参数说明:

path_or_buf:要保存的路径及文件名。

sep:分隔符,默认值为”,”。

na_rep:指定空值的输出方式,默认值为空字符串。

float_format:浮点数的输出格式,要用双引号括起来。

columns:指定要导出的列,用列名列表表示,默认值为None。

header:是否输出列名,默认值为True。

index:是否输出索引,默认值为True。

index_label:索引列的列名,默认值为None。

mode:Python写入模式,默认值为w。

encoding:编码方式,默认值为utf-8。

compression:压缩模式,默认值为infer。

quoting:导出.csv文件是否用引号,默认值为0,表示不加双引号;如果值为1,则每个字段都会加上引号,数值也会被当作字符串看待。

quotechar:引用字符,当quoting=1时可以指定引号字符为双引号(” “)或单引号(’ ‘)。

line_terminator:换行符,默认值为\n。

chunksize:一次写入.csv文件的行数,当DataFrame对象数据特别大时需要分批写入。

date_format:日期输出格式。

doublequote:是否添加双引用符,默认值为True。

escapechar:设置转义字符。

decimal:可识别十进制分隔符的字符。

errors:指定如何处理编码和解码错误,默认值为strict(严格的)

导出多个sheet

导出多个Sheet,应首先使用pd.ExcelWriter()方法打开一个Excel文件,然后再使用to_excel()方法导出指定的Sheet

日期数据处理

DataFrame的日期数据转换 to_datetime()

参数说明:

arg:字符串、日期时间、字符串数组。

errors:值为ignore、raise或coerce,具体说明如下,默认值为ignore,即忽略错误。

ignore:无效的解析将返回原值。

raise:无效的解析将引发异常。

coerce:无效的解析将被设置为NaT,即无法转换为日期的数据将被转换为NaT。

dayfirst:第一个为天,布尔型,默认值为False。例如02/09/2020,如果值为True,则解析日期的第一个为天,即2020-09-02;如果值为False,则解析日期与原日期一致,即2020-02-09。

yearfirst:第一个为年,布尔型,默认值为False。例如14-Feb-20,如果值为True,则解析日期的第一个为年,即2014-02-20;如果值为False,则解析日期与原日期一致,即2020-02-14。

utc:默认值为None。返回utc即协调世界时间。

box:布尔值,默认值为True,如果值为True,则返回DatetimeIndex;如果值为False,则返回ndarray。

format:格式化显示时间的格式。字符串,默认值为None。

exact:布尔值,默认值为True。如果为True,则要求格式完全匹配;如果为False,则允许格式与目标字符串中的任何位置匹配。

unit:默认值为None,参数的单位(D、s、、ms、μs、ns)表示时间的单位。

infer_datetime_format:默认值为False。如果没有格式,则尝试根据第一个日期时间字符串推断格式。

origin:默认值为unix。定义参考日期。数值将被解析为单位数。

cache:默认值为False。如果值为True,则使用唯一、转换日期的缓存应用日期时间转换。在解析重复日期字符串,特别是带有时区偏移的字符串时,可能会产生明显的加速。只有在至少有50个值时才使用缓存。越界值的存在将使缓存不可用,并可能减慢解析速度

df['时间']=df['时间'].apply(lambda x:str(x))
df['转化后日期']=pd.to_datetime(df['时间'])
df

计算100天之后

df['100天后']=df['转化后日期']+pd.Timedelta(100,'D')
df

组合日期要求:

必选:year、month、day。

可选:hour、minute、second、millisecond(毫秒)、microsecond(微秒)、nanosecond(纳秒)

列出2022年每个月

data=pd.date_range('2022',periods=12,freq='M')
data

dt对象的使用

Series.dt()

dt对象提供了year、month、day、dayofweek、dayofyear、is_leap_year、quarter、weekday_name等属性和方法。

(1)获取年、月、日

df[‘年’],df[‘月’],df[‘日’]=df[‘日期’].dt.year,df[‘日期’].dt.month,df[‘日期’].dt.day

(2)从日期判断出所处星期数

df[‘星期几’]=df[‘日期’].dt.day_name()

(3)从日期判断所处季度

df[‘季度’]=df[‘日期’].dt.quarter

(4)从日期判断是否为年底最后一天

df[‘是否年底’]=df[‘日期’].dt.is_year_end

获取日期区间的数据

df[‘日期’] df[‘开始日期’:’结束日期’]

按时期统计数据

(1)按年统计数据 df1.resample(‘AS’).sum()

(2)按季度统计数据 df2.resample(‘Q’).sum()

(3)按月度统计数据 df1.resample(‘M’).sum()

(4)按星期统计数据 df1.resample(‘W’).sum()

(5)按天统计数据 df1.resample(‘D’).sum()

df.index=pd.to_datetime(df.index)
df.resample('D').sum
df

按时期统计并显示数据

(1)按年统计并显示数据 df2.resample(‘AS’).sum().to_period(‘A’)

(2)按季度统计并显示数据 Q_df=df2.resample(‘Q’).sum().to_period(‘Q’)

(3)按月统计并显示数据 df2.resample(‘M’).sum().to_period(‘M’)

(4)按星期统计并显示数据(前5条数据) df2.resample(‘W’).sum().to_period(‘W’).head()

时间序列

重采样 Resample()

参数说明:

rule:字符串,偏移量表示目标字符串或对象转换。

how:用于产生聚合值的函数名或数组函数。例如mean、ohlc和np.max等,默认值为mean,其他常用的值为first、last、median、max和min。

axis:整型,表示行列,axis=0表示列,axis=1表示行。默认值为0,即表示列。

fill_method:升采样时所使用的填充方法,ffill()方法(用前值填充)或bfill()方法(用后值填充),默认值为None。

closed:降采样时,时间区间的开和闭,与数学里区间的概念一样,其值为right或left,right表示左开右闭(即左边值不包括在内),left表示左闭右开(即右边值不包括在内),默认值为right左开右闭。

label:降采样时,如何设置聚合值的标签。例如,10:30—10:35会被标记成10:30还是10:35,默认值为None。

convention:当重采样时,将低频率转换到高频率所采用的约定,其值为start或end,默认值为start。

kind:聚合到时期(period)或时间戳(timestamp),默认聚合到时间序列的索引类型,默认值为None。

loffset:聚合标签的时间校正值,默认值为None。例如,-1s或Second(-1)用于将聚合标签调早1秒。

limit:向前或向后填充时,允许填充的最大时期数,默认值为None。

base:整型,默认值为0。对于均匀细分1天的频率,聚合间隔的”原点”。例如,对于5min频率,base的范围可以是0~4。

on:字符串,可选参数,默认值为None。对DataFrame对象使用列代替索引进行重新采样。列必须与日期时间类似。

level:字符串或整型,可选参数,默认值为None。用于多索引,重新采样的级别名称或级别编号,级别必须与日期时间类似

降采样处理

降采样是周期由高频率转向低频率

df=pd.read_excel('date.xlsx')
df['时间']=df['时间'].apply(lambda x:str(x))
df['转化后日期']=pd.to_datetime(df['时间'])
df1=df.set_index('转化后日期')
df1.resample('W').sum().head()

升采样处理

升采样是周期由低频率转向高频率

3种填充方法。

不填充。空值用NaN代替,使用asfreq()方法。

用前值填充。用前面的值填充空值,使用ffill()方法或者pad()方法。为了方便记忆,ffill()方法可以使用它的第一个字母”f”代替,代表forward,向前的意思。

用后值填充,使用bfill()方法,可以使用字母”b”代替,代表back,向后的意思。

时间序列数据汇总

resample.ohlc() ohlc()函数返回DataFrame对象,每组数据的open(开)、high(高)、low(低)和close(关)值

移动窗口数据计算 rolling()

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)

参数说明:

window:时间窗口的大小,有两种形式,即int或offset。如果使用int,则数值表示计算统计量的观测值的数量,即向前几个数据;如果使用offset,则表示时间窗口的大小。

min_periods:每个窗口最少包含的观测值数量,小于这个值的窗口结果为NA。值可以是int,默认值为None。offset情况下,默认值为1。

center:把窗口的标签设置为居中。布尔型,默认值为False,居右。

win_type:窗口的类型。截取窗的各种函数。字符串类型,默认值为None。

on:可选参数。对于DataFrame对象,是指定要计算移动窗口的列,值为列名。

axis:整型,axis=0表示列,axis=1表示行。默认值为0,即对列进行计算。

closed:定义区间的开闭,支持int类型的窗口。对于offset类型默认是左开右闭(默认值为right)。可以根据情况指定left。

Original: https://blog.csdn.net/qq_60976312/article/details/125094255
Author: 是张鱼小丸子鸭
Title: pandas两个数据结构Series与DataFrame使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/739127/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球