数据分析从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)

相关文章
|
13天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
40 0
|
3月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
77 2
|
7天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
19 2
|
14天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
29 2
|
5天前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
5天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
1月前
|
机器学习/深度学习 数据采集 算法
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
【10月更文挑战第5天】随着数据科学和机器学习领域的快速发展,处理大规模数据集的能力变得至关重要。Python凭借其强大的生态系统,尤其是NumPy、Pandas和SciPy等库的支持,在这个领域占据了重要地位。本文将深入探讨这些库如何帮助科学家和工程师高效地进行数据分析,并通过实际案例来展示它们的一些高级应用。
47 0
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
|
1月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
40 1
|
1月前
|
数据采集 数据可视化 数据挖掘
Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
【10月更文挑战第3天】Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
83 0
|
2月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
【9月更文挑战第2天】数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
56 5