一、DataFrame 结构简介

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二、DataFrame 对象创建

pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)

参数含义如下:

import numpy as npimport pandas as pd

1. 使用普通列表创建

data = [1,2,3,4,5]
df = pd.DataFrame(data)
print(df)
#   0
#0  1
#1  2
#2  3
#3  4
#4  5
data = [1,2,3,4,5]
df = pd.Series(data)
print(df)
#0    1
#1    2
#2    3
#3    4
#4    5
#dtype: int64

2. 使用嵌套列表创建

data = [['xiaowang',20],['Lily',30],['Anne',40]]
df = pd.DataFrame(data)print(df)
#          0   1
#0  xiaowang  20
#1      Lily  30
#2      Anne  40
  • 我们分配列标签时,会按我们分配的进行输出。
  • 这里需要注意的是,我们分配的列标签必须和列数对应
data = [['xiaowang',20],['Lily',30],['Anne',40]]
df = pd.DataFrame(data,columns=['Name','Age'])
print(df)
#       Name  Age
#0  xiaowang   20
#1      Lily   30
#2      Anne   40

3 指定数值元素的数据类型float

  • 需要注意的是,dtype 只能设置一个,设置多个列的数据类型,需要使用其他方式
  • 当我们分配列标签时,满足我们设定的数据类型自动使用,不满足则会自动识别
data = [['xiaowang', 20, "男", 5000],['Lily', 30, "男", 8000],['Anne', 40, "女", 10000]]
df = pd.DataFrame(data,columns=['Name','Age',"gender", "salary"], dtype=int)
print(df)
print(df['salary'].dtype)
#       Name  Age gender  salary
#0  xiaowang   20      男    5000
#1      Lily   30      男    8000
#2      Anne   40      女   10000
#float64

4. 字典嵌套列表创建

data = {'Name':['关羽', '刘备', '张飞', '曹操'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
print(df)
print(df.index)
print(df.columns)
#  Name  Age
#0   关羽   28
#1   刘备   34
#2   张飞   29
#3   曹操   42
#RangeIndex(start=0, stop=4, step=1)
#Index(['Name', 'Age'], dtype='object')
  • 注意:这里使用了默认行标签,也就是 RangeIndex(0.1…n)。它生成了 0,1,2,3,并分别对应了列表中每个元素值。

5. 添加自定义的行标签

data = {'Name':['关羽', '刘备', '张飞', '曹操'],'Age':[28,34,29,42]}
index = ["rank1", "rank2", "rank3", "rank4"]
df = pd.DataFrame(data, index=index)
print(df)
print(df.index)
print(df.columns)#      Name  Age
#rank1   关羽   28
#rank2   刘备   34
#rank3   张飞   29
#rank4   曹操   42
#Index(['rank1', 'rank2', 'rank3', 'rank4'], dtype='object')
#Index(['Name', 'Age'], dtype='object')

6. 列表嵌套字典创建 DataFrame 对象

data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])print(df)
#        a   b     c
#first   1   2   NaN
#second  5  10  20.0
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df1 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b'])
​df2 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b1'])
print("===========df1============")
print(df1)
print("===========df2============")
print(df2)
#===========df1============
#        a   b
#first   1   2
#second  5  10
#===========df2============
#        a  b1
#first   1 NaN
#second  5 NaN

7. Series 创建 DataFrame 对象

  • 也可以传递一个字典形式的 Series,从而创建一个 DataFrame 对象,其输出结果的行索引是所有 index 的合集
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(df)
type(np.NaN)
#   one  two
#a  1.0    1
#b  2.0    2
#c  3.0    3
#d  NaN    4
#float
  • 注意:对于 one 列而言,此处虽然显示了行索引 ‘d’,但由于没有与其对应的值,所以它的值为 NaN。
  • 当我们需要解决不同列的数据类型时,可以使用设置自定义数据类型
data = {
    "Name":pd.Series(['xiaowang', 'Lily', 'Anne']),
    "Age":pd.Series([20, 30, 40],  dtype=float),
    "gender":pd.Series(["男", "男", "女"]),
    "salary":pd.Series([5000, 8000, 10000], dtype=float)
}
df = pd.DataFrame(data)
df
#         Name	      Age	gender	      salary
#0	xiaowang	     20.0	        男	 5000.0
#1	          Lily	     30.0	        男	 8000.0
#2	       Anne	     40.0	        女    10000.0

三、DataFrame 列操作

  • DataFrame 可以使用列标签来完成数据的选取、添加和删除操作。下面依次对这些操作进行介绍

1. 选取数据列

  • 可以使用列索引,轻松实现数据选取。
  • 我们通过字典创建 DataFrame,定义行标签,单独选取每一列并输出。
data = {'Name':['关羽', '刘备', '张飞', '曹操'],'Age':[28,34,29,42]}
index = ["rank1", "rank2", "rank3", "rank4"]
df = pd.DataFrame(data, index=index)
print(df)
print("=========df['Name']:取得Name列===============")
print(df['Name'])
print("=========df['Age']:取得Age列===============")
print(df['Age'])
#      Name  Age
#rank1   关羽   28
#rank2   刘备   34
#rank3   张飞   29
#rank4   曹操   42
#=========df['Name']:取得Name列===============
#rank1    关羽
#rank2    刘备
#rank3    张飞
#rank4    曹操
#Name: Name, dtype: object
#=========df['Age']:取得Age列===============
#rank1    28
#rank2    34
#rank3    29
#rank4    42
#Name: Age, dtype: int64​
  • 我们也可以同时选取很多列。
print("=========df[['Name', 'Age']]:df选取多列===============")
print(df[['Name', 'Age']])#=========df[['Name', 'Age']]:df选取多列===============
#      Name  Age
#rank1   关羽   28
#rank2   刘备   34
#rank3   张飞   29
#rank4   曹操   42
  • 这里需要注意的是,列不是能使用切片选取多列。
print("=========df不能使用切片选取多列===============")
print(df['Name': 'Age']) 
#=========df不能使用切片选取多列===============
#Empty DataFrame
#Columns: [Name, Age]
#Index: []
df[1]

2. 列添加

  • 使用 columns 列索引标签可以实现添加新的数据列,示例如下。
  • 首先,我们创建初始数据。
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)print(df)
#   one  two
#a  1.0    1
#b  2.0    2
#c  3.0    3
#d  NaN    4
  • 然后使用 df[‘列’]= 值,插入新的数据列。
print ("====通过Series添加一个新的列====:")
df['three']=pd.Series([10,20,30],index=['a','b','c'])
print(df)
#​====通过Series添加一个新的列====:
#   one  two  three
#a  1.0    1   10.0
#b  2.0    2   20.0
#c  3.0    3   30.0
#d  NaN    4    NaN
  • 我们也可以将已经存在的数据列相加运算,从而创建一个新的列。
print ("======将已经存在的数据列相加运算,从而创建一个新的列:=======")
df['four']=df['one']+df['three']
print(df)#======将已经存在的数据列相加运算,从而创建一个新的列:=======
#   one  two  three  four
#a  1.0    1   10.0  11.0
#b  2.0    2   20.0  22.0
#c  3.0    3   30.0  33.0
#d  NaN    4    NaN   NaN
  • 如果我们新添加的列当中出现新的行标签,就不会显示出来。
df['error']=pd.Series([10,20,30],index=['b','a','s3'])
print(df)
#   one  two  three  four  error
#a  1.0    1   10.0  11.0   20.0
#b  2.0    2   20.0  22.0   10.0
#c  3.0    3   30.0  33.0    NaN
#d  NaN    4    NaN   NaN    NaN

3. insert() 方法添加

df.insert(loc, column, value, allow_duplicates=False)
info=[['王杰',18],['李杰',19],['刘杰',17]]
df=pd.DataFrame(info,columns=['name','age'])
print(df)
#  name  age
#0   王杰   18
#1   李杰   19
#2   刘杰   17
  • 这里需要注意的是,我们使用 column 参数。数值 1 代表插入到 columns 列表的索引位置。其中,loc 代表整型,插入索引,必须验证 0<=loc<=len(列)。
    df.insert(1,column=‘score’,value=[91,90,75])
print("=====df.insert插入数据:=======")
print(df)
#=====df.insert插入数据:=======
#  name  score  age
#0   王杰     91   18
#1   李杰     90   19
#2   刘杰     75   17
  • 当然,我们也可以添加重复列标签数据。
df.insert(1,column='score',value=[80,70,90],allow_duplicates=True)
print(df)
#  name  score  score  age
#0   王杰     80     91   18
#1   李杰     70     90   19
#2   刘杰     90     75   17
  • 此时,如果我们单独提取出列标签是 score 的列,那么,两列就都会输出。
df['score']
#score	score
#0	80	91
#1	70	90
#2	90	75
df.insert(1,column='score',value=[80,70,90])
# 错误 cannot insert name, already exists

4. 删除数据列

  • 我们通过 del 和 pop() 都能够删除 DataFrame 中的数据列,但区别是,del 没有返回值,而 pop返回值,具体示例如下:
  • 首先,我们创建初始数据,便于后面的对比操作。
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
     'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']),
     'three' : pd.Series([10,20,30], index=['a','b','c'])}
df = pd.DataFrame(d)
print ("Our dataframe is:")
print(df)
#Our dataframe is:
#   one  two  three
#a  1.0    1   10.0
#b  2.0    2   20.0
#c  3.0    3   30.0
#d  NaN    4    NaN
  • 我们使用 del 方法进行删除操作。
del df['one']
print("=======del df['one']=========")
print(df)
#=======del df['one']=========
#   two  three
#a    1   10.0
#b    2   20.0
#c    3   30.0
#d    4    NaN
  • 我们使用 pop 方法进行删除操作。
  • 由于,pop 方法可以返回我们删除的数据,因此,在一定程度上也可以用来提取数据,但是,他也会修改我们的源数据。
res_pop = df.pop('two')
print("=======df.pop('two')=========")
print(df)
print("=======res_pop = df.pop('two')=========")
print(res_pop)
#=======df.pop('two')=========
#   three
#a   10.0
#b   20.0
#c   30.0
#d    NaN
#=======res_pop = df.pop('two')=========
#a    1
#b    2
#c    3
#d    4
#Name: two, dtype: int64

原文地址:https://blog.csdn.net/weixin_45891612/article/details/129118246

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_11805.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注