Pandas 数据结构

本文详细介绍了Pandas的两种基本数据结构——Series和DataFrame,包括它们的创建、常用属性和方法,如Series的索引、值的获取,以及DataFrame的布尔索引和运算。还讲解了如何修改Series和DataFrame,如设置行索引、修改行名和列名,以及添加、删除和插入列。最后,探讨了数据的导入导出,如pickle、CSV和Excel格式。
摘要由CSDN通过智能技术生成

Pandas 数据结构

学习目标

  • 掌握Series的常用属性及方法
  • 掌握DataFrame的常用属性及方法
  • 掌握更改Series和DataFrame的方法
  • 掌握如何导入导出数据

1 Series和DataFrame

  • DataFrame和Series是Pandas最基本的两种数据结构
  • DataFrame用来处理结构化数据(SQL数据表,Excel表格)
  • Series用来处理单列数据,也可以把DataFrame看作由Series对象组成的字典或集合

1.1 创建Series

  • 在Pandas中,Series是一维容器,Series表示DataFrame的每一列

    • 可以把DataFrame看作由Series对象组成的字典,其中key是列名,值是Series
    • Series和Python中的列表非常相似,但是它的每个元素的数据类型必须相同
  • 创建 Series 的最简单方法是传入一个Python列表,如果传入的数据类型不统一,最终的dtype通常是object

    import pandas as pd
    s = pd.Series(['banana',42])
    print(s)
    

    输出结果

    0    banana
    1        42
    dtype: object
    
    • 上面的结果中,左边显示的0,1是Series的索引
  • 创建Series时,可以通过index参数 来指定行索引。(索引即索引,并不是数据本身

    s = pd.Series(
        ['Wes McKinney','Male'],
        index = ['Name','Gender'])
    print(s)
    

    输出结果

    Name      Wes McKinney
    Gender            Male
    dtype: object
    

1.2 创建 DataFrame

  • 可以使用字典来创建DataFrame

    name_list = pd.DataFrame(
        {
         'Name':['Tome','Bob'],
         'Occupation':['Teacher','IT Engineer'],
         'age':[28,36]})  # data是字典的格式,键是列名,值是列表-装着列的数据
    print(name_list)
    

    输出结果

    Name   Occupation  age
    0  Tome      Teacher   28
    1   Bob  IT Engineer   36
    
  • 创建DataFrame的时候可以使用columns参数指定列的顺序,也可以使用index来指定行索引

    • data :数据
    • columns:指定列的顺序
    • index:来指定行索引
    name_list = pd.DataFrame(
        data = {
         'Occupation':['Teacher','IT Engineer'],'Age':[28,36]},
        columns=['Age','Occupation'],
        index=['Tome','Bob'])  # index这一列被当成索引,
    print(name_list)
    

    输出结果

         Age   Occupation
    Tome   28      Teacher
    Bob    36  IT Engineer
    

2 Series 常用操作

注意

在jupyter notebook中,在方法函数/类后加问号 ,再运行,就可以看函数的说明情况。写代码时要经常参考文档。
在 jupyter notebook中,可以省略print,直接写变量名即可打印变量。
在单元格中可以执行 windows/linux命令: !xxx命令 ,运行单元格
注意区分大小写

2.1 Series常用属性

series 是一个一维数组,没有行列的概念!

一维就是一行 或 是一列。

series.index 取一维数组的索引,即是 取一维数组中每个值的索引!

dataframe 二维数组中取一行 或一列,返回Series一维数组,如果是在二维数组中取一行一维数组再取索引,返回的是这个二维数组的所有列字段名,如果是在二维数组中取一列一维数组再取索引,返回的是这个二维数组的左边所有的行索引(名称存疑?)

pandas在读取csv文件:read_csv方法

data = pd.read_csv(r'data/nobel_prizes.csv',index_col='id') # id这一列会被当作行索引,index_col设置行索引。
print(data) # 显示data数据内容
data.head()  # 默认显示前5行  # 这里是在在jupyter notebook中省略print
data.head(10)  # 显示前10行
data.tail()   # 默认显示后5行

输出结果

year categor= overallMotivation firstname surname motivation share
id
941 2017 physics NaN Rainer Weiss "for decisive contributions to the LIGO detect… 2
942 2017 physics NaN Barry C. Barish "for decisive contributions to the LIGO detect… 4
943 2017 physics NaN Kip S. Thorne "for decisive contributions to the LIGO detect… 4
944 2017 chemistry NaN Jacques Dubochet "for developing cryo-electron microscopy for t… 3
945 2017 chemistry NaN Joachim Frank "for developing cryo-electron microscopy for t… 3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vm237d2z-1685291670251)(img\data_head()].png)

获取df中的一行: loc [一行的索引]

  • 使用 DataFrame的 loc 属性 获取数据集里的一行,就会得到一个Series对象

  • 使用行索引标签选择一条记录

    first_row = data.loc[941]  # loc是一个dataframe中的一个属性,941是行索引(上一步加载的时候id这一列变成行索引)  
    type(first_row)  # 这里是在在jupyter notebook中省略print
    # first_row是一个Series对象
    

    输出结果

    pandas.core.series.Series  # first_row是一个Series对象
    
    print(first_row)
    

    输出结果

    year                                                              2017
    category                                                       physics
    overallMotivation                                                  NaN
    firstname                                                       Rainer
    surname                                                          Weiss
    motivation           "for decisive contributions to the LIGO detect...
    share                                                                2
    Name: 941, dtype: object
    

S.Index 属性 S.values属性 :获取一维数组的 索引 和 值

  • 可以通过 index values 属性获取一维数组的索引和值

    print(first_row.index)
    

    输出结果

    Index(['year', 'category', 'overallMotivation', 'firstname', 'surname',
     'motivation', 'share'],
    dtype='object')
    
    print(first_row.values)
    

    输出结果

    [2017 'physics' nan 'Rainer' 'Weiss'
    '"for decisive contributions to the LIGO detector and the observation of gravitational waves"'
    2]
    

补充:df.keys()方法:数据集获取所有列字段名

  • Series的keys方法,作用个index属性一样
    (可以这样理解:获取数据集的所有字段名)

    data.keys()
    

    输出结果

    Index(['year', 'category', 'overallMotivation', 'firstname', 'surname',
     'motivation', 'share'],
    dtype='object')
    

总结:Series的一些属性

属性 说明
loc 使用索引值取子集,使用行索引获取DataFrame的一行,返回Series
iloc 使用索引位置(行号)取子集,使用行号获取DataFrame的一行,返回Series
dtype或dtypes Series内容的类型
shape 数据的维数,DataFrame和Series共有此方法
size Series中元素的数量
index Series中的索引
values Series的值
print(first_row.dtype)  # object

print(data.shape)       # (4916, 28)
print(first_row.shape)  # (28,)  # 从这里可以说明Series是一维的

print(first_row.size)   # 28

2.2 Series常用方法

df.列名 或 dataframe[‘列名’] 获取df中的一列

share = data.share #从DataFrame中 获取Share列(几人获奖)返回Series

share = data.share  # 从DataFrame中 获取Share列(几人获奖)返回Series
share = data['share']

df[[‘列名’,‘列名’]] 返回dataframe:获取df中的多列,返回df

data[['year']]  #  两个方括号返回DataFrame类型,即使只取一列, pandas.core.frame.DataFrame
data[['year','category']]  # 取出两列数据,返回dataframe。如果取多个列,只能取dataframe类型

数值型的Series,常见计算:mean()平均 max() min() std()标准差

share = data.share  # 从DataFrame中 获取Share列(几人获奖)返回Series
print(type(share)  # 类型:pandas.core.series.Series
share.mean()      # 计算几人获奖的平均值

输出结果

1.982665222101842
share.max() # 计算最大值

输出结果

4
share.min() # 计算最小值

输出结果

1
share.std() # 计算标准差

输出结果

0.9324952202244597

median() mod() value_counts() describe()

s.value_counts()方法:可以返回不同值的条目数量

movie = pd.read_csv('data/movie.csv')    # 加载电影数据
director = movie['director_name']   # 从电影数据中获取导演名字 返回Series
actor_1_fb_likes = movie['actor_1_facebook_likes'] # 从电影数据中取出主演的facebook点赞数
director.head()  #查看导演Series数据

 
movie['director_name']   # 一个方括号返回Series类型
movie[['director_name']]  #  两个方括号返回DataFrame类型 pandas.core.frame.DataFrame
movie[['director_name','actor_1_facebook_likes']]  # 取出两列数据,如果取多个列,只能取dataframe类型

输出结果

0        James Cameron
1       Gore Verbinski
2           Sam Mendes
3    Christopher Nolan
4          Doug Walker
Name: director_name, dtype: object
actor_1_fb_likes.head() #查看主演的facebook点赞数

输出结果

0     1000.0
1    40000.0
2    11000.0
3    27000.0
4      131.0
Name: actor_1_facebook_likes, dtype: float64
pd.set_option('max_rows', 8) # 设置最多显示8行
director.value_counts()      # 统计不同导演指导的电影数量

输出结果

Steven Spielberg    26
Woody Allen         22
Clint Eastwood      20
Martin Scorsese     20
              ..
Gavin Wiesen         1
Andrew Morahan       1
Luca Guadagnino      1
Richard Montoya      1
Name: director_name, Length: 2397, dtype: int64
actor_1_fb_likes.value_counts()

输出结果

1000.0     436
11000.0    206
2000.0     189
3000.0     150
    ... 
216.0        1
859.0        1
225.0        1
334.0        1
Name: actor_1_facebook_likes, Length: 877, dtype: int64

通过count()方法可以返回有多少非空值

director.count() 

输出结果

4814
director.shape

输出结果

(4916,)

通过describe()方法打印描述信息

actor_1_fb_likes.describe()

输出结果

count      4909.000000
mean       6494.488491
std       151
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pandas是一个开源的Python数据分析库,提供了多种数据结构,其中包括DataFrame和Panel。DataFrame是pandas中最常用的数据结构之一,它是一个二维的数据结构,数据以行和列的表格方式排列,可以执行各种行列操作和算术运算。通过pandas的DataFrame构造函数,我们可以创建一个DataFrame对象,传入数据、索引、列名等参数来构建DataFrame对象。 另外,pandas还提供了Panel这个数据结构,它是一个三维的数据结构,可以看作是DataFrame的容器,可以存储多个DataFrame。通过pandas的Panel构造函数,我们可以创建一个空的Panel对象,也可以传入数据、items、major_axis、minor_axis等参数来构建一个具有数据的Panel对象。 对于DataFrame,我们可以指定索引和列名来创建一个具有特定结构的DataFrame。在创建DataFrame时,如果给定的索引和列名的长度与数据的维度不匹配,将会报错。例如,在给定的数据列表中,如果每个内层列表的长度与列名的长度不一致,将会报错。 综上所述,pandas提供了多种数据结构,包括DataFrame和Panel,它们可以用于对数据进行分析和操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Pandas数据结构分析](https://blog.csdn.net/m0_58387972/article/details/123302776)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python3快速入门(十三)——Pandas数据结构](https://blog.csdn.net/cdqvkn73338/article/details/100959261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值