数据分析从0到1----Pandas篇(二)

简介: 数据分析从0到1----Pandas篇

上面介绍完毕了DataFrame的行搜索操作,现在来介绍行添加操作.

注意这与列添加操作是不一样的.添加列使用的是insert,添加行使用的是append

使用append函数,可以将新的数据行添加到DataFrame中,该函数会在行末追加数据行

df. append (other,ignore_index=False,verify_integrity=False,sort=False)

将"other"追加到调用者的末尾,返回一个新对象。"other"行中不在调用者中的列将作为新列添加。也就是如果你的other中的数据插如了此前没有的(其实只要你插的长度比之前行的长度都长,那么就会触发这个效果),那么就会添加一个新列来表示这一数据

  • other : DataFrame或Series/dict类对象,或这些对象的列表
  • ignore_index:默认为False,如果为True将不适用index标签.即如果为False,进行添加时必须提供该数据对应的索引,否则报错
  • verify_integrity:默认为False,如果为True,则在创建具有重复项的索引时引发ValueError
  • sort:排序

首先是以字典的形式进行添加,如果直接创建一个字典然后使用append,那么如果ignore_index为False,那么必须指定索引,否则报错.

但是如果使用Series进行添加,并且设定了name这个属性,那么name属性的值就会变为其标签名称

data={
    'Name':['wang','zhang','li','liu'],
    'Age':[12,32,42,18],
    'Sex':['m','f','f','m']
}
df = pd.DataFrame(data)
print(df)
print('-------')
new={'Name':'sun','Age':88}
df1 = df.append(new,ignore_index=True)# 使用ignore将使index自增
print(df1)
print('-------')
s = pd.Series(new,name='a') # 如果直接使用Series,并且指定name,那么就会把name的值作为行的index进行插入
df2 = df1.append(s) 
print(df2)

同时也可以使用列表进行追加,但是有一些特殊的地方

如果list是一维的,则以列的形式追加

如果list是二维的,则以行的形式追加

如果list是三维的,只添加一个值

同时需要注意,使用append可能会出现相同的index,想避免的话,可以使用ignore_index=True

先介绍一位的,由于是直接向某列添加数据,并且会创建新的行,因此这就会导致其他列上的数据为NaN,因此使用较少

data=[
    [1,2,3,4],
    [5,6,7,8]
]
df = pd.DataFrame(data)
print(df)
print('--------------')
l1 = [1,2]
df1 = df.append(l1)
print(df1)
print('--------------')
df2 = df.append(l1,ignore_index=True)
print(df2)

再看下面一组代码,直接使用的是二位列表进行添加,并且没有指定index和columns的名称,然后你注意看结果

data={
    'Name':['wang','zhang','li','liu'],
    'Age':[12,32,42,18],
    'Sex':['m','f','f','m']
}
df = pd.DataFrame(data)
print(df)
print('-------')
# 添加二位列表,那么以行添加
# 同时由于没有指定index和column的名称
# 因此会直接添加新的列和行
l1 = [['zhao',52,'m'],['qian',33,'f']]
df1 = df.append(l1)
print(df1)
print('-------')
df2 = df1.append(l1,ignore_index=True)
print(df2)

可以发现不仅多出来了3列,而且行索引也并没有接下去,

而如果要使得行索引接下去,那么就要使得ignore_index=True

但是列这个新多出来的标签咋么办呢?

其实可以想到之所以会多出这三列,也就是因为没有指定columns这个属性,那么这个属性可以在DataFrame创建的时候进行指定,因此我们可以先把list集合中的数据用于创建DataFrame,同时在DataFrame中设定对应的columns标签,如下

data={
    'Name':['wang','zhang','li','liu'],
    'Age':[12,32,42,18],
    'Sex':['m','f','f','m']
}
df = pd.DataFrame(data)
print(df)
l1 = [['zhao',52,'m'],['qian',33,'f']]
print('-------')
df3 = pd.DataFrame(l1,columns=['Name','Age','Sex'])
df4 = df.append(df3,ignore_index=True)
print(df4)

最后是三维的数据,不多介绍,看代码就能理解个大概

data=[
    [1,2,3,4],
    [5,6,7,8]
]
df = pd.DataFrame(data)
print(df)
print('--------------')
l1 = [
      [[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]],
      [[1,2,3,4],[1,2,3,4],[1,2,3,4]]
     ]
# 三维的话,会把最里面的数据直接作为新一行上每一列上的新数据
df1 = df.append(l1,ignore_index=True)
print(df1)

添加操作介绍完毕,现在开始介绍删除操作

删除操作与列操作的pop类型,行的删除操作使用的是drop

drop将会返回删除数据后的DataFrame数据,而不是再操作的数据上进行修改,当然,我们也可以把drop函数的inplace设置为True,如果这样就是再原有的数据上进行修改了

通过传递一个行索引标签,从DataFrame中删除某一行数据。如果所有标签存在重复,那么他们将被一起删除,如下:

df = pd.DataFrame([[1,2],[3,4]],columns=['a','b'])
df2 = pd.DataFrame([[5,6],[7,8]],columns=['a','b'])
df = df.append(df2) # 注意这里没有使用ignore_index,因此新增的两行的行标签为0 1
print(df)
df3 = df.drop(0) # 删除行标签为0的行
print(df3) # 发现删了两行

转置

返回DataFrame的专职,也就是把行和列进行交换

data={
    'Name':['wang','zhang','li','liu'],
    'Age':[12,32,42,18],
    'Sex':['m','f','f','m']
}
df = pd.DataFrame(data)
print(df)
print('-------')
df.T # 转置操作

axes

返回一个行标签 ,列表前组成的列表

data={
    'Name':['wang','zhang','li','liu'],
    'Age':[12,32,42,18],
    'Sex':['m','f','f','m']
}
df = pd.DataFrame(data)
print(df.axes) # 一次性直接显示行和列标签
print(df.index,df.columns) # 分别显示行和列标签

dtypes

dtypes用于返回每一列的数据类型

data={
    'Name':['wang','zhang','li','liu'],
    'Age':[12,32,42,18],
    'Sex':['m','f','f','m']
}
df = pd.DataFrame(data)
df.dtypes

empty

返回一个布尔值,判断输出数据对象是否为空,若为空则为True

def is_empty(df):
    if df.empty:
        return True
    else:
        return False;
data={
    'Name':['wang','zhang','li','liu'],
    'Age':[12,32,42,18],
    'Sex':['m','f','f','m']
}
df = pd.DataFrame(data)
print(df.empty)
print(is_empty(df))
df = pd.DataFrame()
print(df.empty)
print(is_empty(df))

columns

返回DataFrame所有列标签

data={
    'Name':['wang','zhang','li','liu'],
    'Age':[12,32,42,18],
    'Sex':['m','f','f','m']
}
df = pd.DataFrame(data)
print(df.columns) # 返回列表前
print(df.columns.size) # 返回列标签个数

shape

返回一个元组,获取行数和列数,表示了DataFrame维度

data={
    'Name':['wang','zhang','li','liu'],
    'Age':[12,32,42,18],
    'Sex':['m','f','f','m']
}
df = pd.DataFrame(data)
rows,cols = df.shape
print(df.shape)
print(rows,cols)

values

以ndarray数组的形式返回DataFrame中的数据

data={
    'Name':['wang','zhang','li','liu'],
    'Age':[12,32,42,18],
    'Sex':['m','f','f','m']
}
df = pd.DataFrame(data)

rename

DataFrame.rename(index=None,columns=None,inplace=False)

  • index:修改后的行标签
  • columns:修改后的列标签
  • inplace:默认为False,不改变源数据,返回修改后的数据. True更改源数据

该方法用于修改列名,并且可以修改部分行或者列

data={
    'Name':['wang','zhang','li','liu'],
    'Age':[12,32,42,18],
    'Sex':['m','f','f','m']
}
df = pd.DataFrame(data)
print(df)
print('------')
df.rename(index={0:'zero',1:'one',2:'two',3:'three'},inplace=True)
print(df)
print('------')
df.rename(columns={'Name':1,'Age':2,'Sex':3},inplace=True)
print(df)
print('------')
df = pd.DataFrame(data)
print(df)
print('------')
df.rename(index={0:'zero',1:'one',2:'two',3:'three'},columns={'Name':1,'Age':2,'Sex':3},inplace=True)
print(df)

info

用于打印DataFrame的简要摘要,显示有关DataFrame的学习,包括索引的数据类型dtype和列的数据类型dtype,非空值的数量和内存的使用情况

data={
    'Name':['wang','zhang','li','liu'],
    'Age':[12,32,42,18],
    'Sex':['m','f','f','m']
}
df = pd.DataFrame(data)
print(df.info())

sort_index

sort_index (axis=0,ascending=True,inplace=False)

作用:默认根据行标签对所有行排序,或根据列标签对所有列排序,或根据指定某列或某几列对行排序。

注意: df.sort_index()可以完成和df.sort_values()完全相同的功能,但python更推荐用只用df.sort_index()对“根据行标签"和“根据列标签"排序,其他排序方式用df.sort_values()

  • axis: 0按照行名排序;1按照列名排序
  • ascending:默认True升序排列;False降序排列
  • inplace:默认False,否则排序之后的数据直接替换原来的数据
df = pd.DataFrame({
    'b':[3,2,1],
    'c':[4,7,2],
    'a':[8,5,3],
    'd':[2,1,3]},
    index=[2,1,0]
)
print(df)
print('-------')
df.sort_index(inplace=True)
print(df)
print('-------')
df.sort_index(axis=1,inplace=True,ascending=False)
print(df)

sort_values

DataFrame.sort_values(by,axis=0, ascending=True,inplace=False,kind='quicksort',na_position=' last')

作用:既可以根据列数据,也可根据行数据排序。

注意:必须指定by参数,即必须指定哪几行或哪几列;无法根据index名和columns名排序(由.sort_index()执行)

  • by: str or list of str;如果axis=0,那么by=“列名”;如果axis=1,那么by=“行名”。
  • axis: {0 or ‘index’, 1 or ‘columns’}, default 0,默认按照列排序,即纵向排序;如果为1,则是横向排序。
  • ascending:布尔型,True则升序,如果by=[列名1.列名2’],则该参数可以是[True, False],即第一字段升序,第二个降序。
  • inplace:布尔型,是否用排序后的数据框替换现有的数据框。
  • na_position: {‘first’, last’}, default ‘last’,默认缺失值排在最后面。
df = pd.DataFrame({
    'b':[3,2,2,4],
    'c':[4,7,2,6],
    'a':[8,5,3,2],
    'd':[2,1,3,7]},
    index=[2,1,0,3]
)
print(df)
print('--------')
df.sort_values('b',inplace=True)
print(df)
print('--------')
df.sort_values(['b','a'],inplace=True,ascending=[True,True])
# 以b的升序进行排序,如果b列数据相同,那么再按照a的升序进行排序
print(df)
print('--------')
# 按行3升序,行0降序排列 只有行3的数据重复了,才会依靠行0进行排序
df.sort_values([3,0],axis=1,inplace=True,ascending=[True,False])
print(df)

相关文章
|
2月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
48 2
|
5天前
|
数据挖掘 Python
Pandas数据分析实战(2):2023美国财富1000强公司情况
Pandas数据分析实战(2):2023美国财富1000强公司情况
16 0
|
5天前
|
数据采集 数据挖掘 Python
Pandas数据分析实战(1):2023美国财富1000强公司情况
Pandas数据分析实战(1):2023美国财富1000强公司情况
17 0
|
1月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
【9月更文挑战第2天】数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
49 5
|
2月前
|
数据挖掘 大数据 数据处理
数据分析师的秘密武器:精通Pandas DataFrame合并与连接技巧
【8月更文挑战第22天】在数据分析中,Pandas库的DataFrame提供高效的数据合并与连接功能。本文通过实例展示如何按员工ID合并基本信息与薪资信息,并介绍如何基于多列(如员工ID与部门ID)进行更复杂的连接操作。通过调整`merge`函数的`how`参数(如'inner'、'outer'等),可实现不同类型的连接。此外,还介绍了使用`join`方法根据索引快速连接数据,这对于处理大数据集尤其有用。掌握这些技巧能显著提升数据分析的能力。
52 1
|
2月前
|
算法 数据挖掘 数据处理
豆瓣评分8.7!Python pandas创始人亲码的数据分析入门手册!
在众多解释型语言中,Python最大的特点是拥有一个巨大而活跃的科学计算社区。进入21世纪以来,在行业应用和学术研究中采用python进行科学计算的势头越来越猛。 近年来,由于Python有不断改良的库(主要是pandas),使其成为数据处理任务的一大代替方案,结合其在通用编程方面的强大实力,完全可以只使用Python这一种语言去构建以数据为中心的应用程序。 作为一个科学计算平台,Python的成功源于能够轻松的集成C、C++以及Fortran代码。大部分现代计算机环境都利用了一些Fortran和C库来是西安线性代数、优选、积分、快速傅里叶变换以及其他诸如此类的算法。
|
2月前
|
算法 数据挖掘 数据处理
豆瓣评分8.7!Python pandas创始人亲码的数据分析入门手册!
在众多解释型语言中,Python最大的特点是拥有一个巨大而活跃的科学计算社区。进入21世纪以来,在行业应用和学术研究中采用python进行科学计算的势头越来越猛。 近年来,由于Python有不断改良的库(主要是pandas),使其成为数据处理任务的一大代替方案,结合其在通用编程方面的强大实力,完全可以只使用Python这一种语言去构建以数据为中心的应用程序。 作为一个科学计算平台,Python的成功源于能够轻松的集成C、C++以及Fortran代码。大部分现代计算机环境都利用了一些Fortran和C库来是西安线性代数、优选、积分、快速傅里叶变换以及其他诸如此类的算法。
|
2月前
|
数据采集 数据挖掘 数据处理
Python数据分析:Numpy、Pandas高级
在上一篇博文中,我们介绍了Python数据分析中NumPy和Pandas的基础知识。本文将深入探讨NumPy和Pandas的高级功能,并通过一个综合详细的例子展示这些高级功能的应用。
|
2月前
|
数据采集 数据挖掘 数据处理
Python数据分析:Numpy、Pandas基础
本文详细介绍了 Python 中两个重要的数据分析库 NumPy 和 Pandas 的基础知识,并通过一个综合的示例展示了如何使用这些库进行数据处理和分析。希望通过本篇博文,能更好地理解和掌握 NumPy 和 Pandas 的基本用法,为后续的数据分析工作打下坚实的基础。
下一篇
无影云桌面