首页 > 其他分享 >pandas ---- pd.DataFrame基本用法

pandas ---- pd.DataFrame基本用法

时间:2024-06-15 17:01:44浏览次数:26  
标签:loc City df Age Alice DataFrame ---- pd

文章目录


前言

本部分主要介绍一些注意事项。另外,series是基础,好多用法都是series扩展一下,很类似的。

1 loc和iloc注意事项。(后面这些都会在笔记中提到)

(1)返回的是Series还是dataframe取决于你有没有加中括号
【注】:如果你对数组索引单个也加上中括号,那么返回的将是 DataFrame 而不是 Series这个规则是普遍适用的,下面也有,这个规则要记住
【注】:单个的一般大家都习惯不加中括号,大不了最后用 .squeeze() ---- DataFrame转Series或者 .to_frame()转一下
(2)loc可以直接布尔索引,iloc布尔索引后还有.values一下转成numpy数组才能布尔索引

2 DataFrame的维度

一、 DataFrame的创建 — pd.DataFrame(data,index=None,columns=None)

— data:可以是字典、列表、NumPy 数组、Pandas Series 或 DataFrame 等。
— index:指定行索引,可以是列表、NumPy 数组或 Pandas Index 对象。
— columns:指定列名,可以是列表、NumPy 数组或 Pandas Index 对象。
没有指定就生成默认的位置索引。

1 字典创建DataFrame(字典转Dataframe很常用)

## 利用字典创建DataFrame
dict = {
   '数学':[93,89,80,77],'英语':[90,80,70,75],'语文':[87,79,67,92]}
df1 = pd.DataFrame(dict)
print(df1)                          #      数学  英语  语文
                                    #   0   93   90    87
                                    #   1   89   80    79
                                    #   2   80   70    67
                                    #   3   77   75    92

df2 =pd.DataFrame(dict,index=['张三','李四','王五','赵六'])
print(df2)                          #      数学  英语  语文
                                    # 张三   93   90    87
                                    # 李四   89   80    79
                                    # 王五   80   70    67
                                    # 赵六   77   75    92

2 用numpy数组或者嵌套list创建DataFrame

# 从列表创建
data = [['Alice', 25], 
        ['Bob', 30], 
        ['Charlie', 35]]
df1 = pd.DataFrame(data,index=['a','b','c'] ,columns=['Name', 'Age'])
print(df1)                  #       Name  Age
                            # a    Alice   25
                            # b      Bob   30
                            # c  Charlie   35

# 从 NumPy 数组创建
data = np.array([[1, 2], 
                 [3, 4], 
                 [5, 6]])
df2 = pd.DataFrame(data, index=['a','b','c'], columns=['A', 'B'])      
print(df2)                  #    A  B
                            # a  1  2
                            # b  3  4
                            # c  5  6

二、DataFrame的访问、索引、切片、布尔索引、修改等操作

1 行切片访问 df[ : ] ---- 不能用单个数字索引,只能用切片索引(后面会用loc和iloc替代这个很呆的功能)— 默认位置索引和自定义索引都支持

【注1】:这里切片就是真要切片了,不支持 df[0] , df[1]这种
【注2】:所以就很呆,所以我们后面都会用loc和iloc来替代这个垃圾功能
【注3】:切片无论是有没有设置自定义index都可以用默认位置索引(左闭右开),用自定义(符号)index也可以,但是是(左闭右闭)

# 创建一个示例 DataFrame
data = {
   
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'Score': [85.5, 88.0, 95.0, 70.5, 80.0]
}
df = pd.DataFrame(data)        #      Name  Age  Score
print(df)                      # 0    Alice   24   85.5
                               # 1      Bob   27   88.0
                               # 2  Charlie   22   95.0
                               # 3    David   32   70.5
                               # 4      Eve   29   80.0

print(df[0:3])                 #      Name  Age  Score
                               # 0    Alice   24   85.5
                               # 1      Bob   27   88.0
                               # 2  Charlie   22   95.0    
                               
df2 = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])      # 自定义一下索引
print(df2)                     #       Name  Age  Score
                               # a    Alice   24   85.5
                               # b      Bob   27   88.0
                               # c  Charlie   22   95.0
                               # d    David   32   70.5
                               # e      Eve   29   80.0
                               
print(df2[0:3])                #       Name  Age  Score
                               # a    Alice   24   85.5
                               # b      Bob   27   88.0
                               # c  Charlie   22   95.0
                               
print(df2['a':'c'])            #       Name  Age  Score
                               # a    Alice   24   85.5
                               # b      Bob   27   88.0
                               # c  Charlie   22   95.0
                               
print(df2[0])              # KeyError: 0 不能用数字索引,只能用切片索引

2 按列选择

df[‘column_name’]:选择单列,返回 Series。

df[[‘column_name’]] :选择单列,返回 DataFrame。

【注】:如果你对数组索引单个也加上中括号,那么返回的将是 DataFrame 而不是 Series这个规则是普遍适用的,下面也有,这个规则要记住
【注】:单个的一般大家都习惯不加中括号,大不了最后用 .squeeze() ---- DataFrame转Series或者 .to_frame()转一下

# 创建示例 DataFrame
data = {
   'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [24, 27, 22, 32],
        'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print(df)               #     Name  Age         City
                        # 0    Alice   24     New York
                        # 1      Bob   27  Los Angeles
                        # 2  Charlie   22      Chicago
                        # 3    David   32      Houston
                        
print(df['Name'])       # 0      Alice
                        # 1        Bob
                        # 2    Charlie
                        # 3      David
                        # Name: Name, dtype: object           Series
                        
print(df[['Name']])     #      Name
                        # 0    Alice
                        # 1      Bob
                        # 2  Charlie
                        # 3    David
                        # DataFrame                         两个中括号返回的是 DataFrame

df[[‘col1’, ‘col2’]]:选择多列,返回 DataFrame。

3 按布尔条件选择

df[df[‘column_name’] > value]:选择满足条件的行。

df[(df[‘Age’] > 25) & (df[‘Score’] > 85)] :and 注意里面布尔条件都要分别用小括号括起来,不然会报错

df[(df[‘Age’] > 25) | (df[‘Score’] > 85)] : or

# 创建一个示例 DataFrame
data = {
   
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'Score': [85.5, 88.0, 95.0, 70.5, 80.0]
}
df = pd.DataFrame(data)        #      Name  Age  Score
print(df)                      # 0    Alice   24   85.5
                               # 1      Bob   27   88.0
                               # 2  Charlie   22   95.0
                               # 3    David   32   70.5
                               # 4      Eve   29   80.0

print(df[(df['Age'] > 25) & (df['Score'] > 85)])        #    Name  Age  Score
                                                         # 1   Bob   27   88.0 

4 loc[ ] 与 iloc[ ]进行操作

  • [注]:关于你筛选出来的数据是DataFrame还是Series关键在于你整数数组访问单个时有没有加中括号,没有加就有可能是Series,有就是DataFrame,看下面例子就懂了
  • [注]:其实这个用法记住各种筛选条件可以混合用就是了

(1)loc[ ]

loc:基于标签(名称)的索引,用于按行和列的标签来访问数据。适合于按行/列标签精确选择数据。
初始要筛选的DataFrame

# 创建示例 DataFrame
data = {
   'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [24, 27, 22, 32],
        'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
df.set_index('Name', inplace=True)
print(df)                            #        Age         City
                                    # Name                      
                                    # Alice     24     New York
                                    # Bob       27  Los Angeles
                                    # Charlie   22     Chicago
                                    # David     32     Houston
基于行标签的选择 — df.loc[‘Alice’] ,df.loc[[‘Alice’]]
df.loc[‘Alice’] — 返回 Series
df.loc[[‘Alice’]] — 返回 DataFrame
df.loc[[‘Bob’, ‘David’]] — 返回 DataFrame ,这种数组的索引方式都可以用

如果你对数组索引单个也加上中括号,那么返回的将是 DataFrame 而不是 Series这个规则是普遍适用的,下面也有

# 按行标签选择
row = df.loc['Alice']               
print(row)                           # Age            24
                                    # City    New York
                                    # Name: Alice, dtype: object                # 单行返回 Series
                                
row2 = df.loc[['Alice']]                # 加上中括号,返回的是 DataFrame了·
print(row2)                         #        Age      City
                                    # Name                   
                                    # Alice     24  New York

df2 = df.loc[['Bob', 'David']]
print(df2)                           #        Age         City
                                    # Name                      
                                    # Bob       27  Los Angeles
                                    # David     32     Houston
  • 选择标签为 ‘Alice’ 的行。
基于行和列标签的选择 — df.loc[‘Alice’, ‘Age’] , df.loc[‘Alice’, [‘Age’, ‘City’]], df.loc[[‘Alice’], [‘Age’, ‘City’]]
df.loc[‘Alice’, [‘Age’, ‘City’]] — 返回Series
df.loc[[‘Alice’], [‘Age’, ‘City’]] — 返回Dataframe

如果你对数组索引单个也加上中括号,那么返回的将是 DataFrame 而不是 Series这个规则是普遍适用的,下面也有

  • 选择标签为 ‘Alice’ 的行和 ‘Age’ 列对应的单元格数据。

  • 选择标签为 ‘Alice’ 的行以及 ‘Age’ 和 ‘City’ 列。

# 选择特定行和列
value = df.loc['Alice', 'Age']       
print(value)                         # 24                                    # 如果只选择一行一列,返回的是标量

# 选择特定行的多列  --- 返回 Series
subset = df.loc['Alice', ['Age', 'City']] 
print(subset)                        # Age          24
                                    # City    New York
                                    # Name: Alice, dtype: object              # 注意:返回的是 Series
                     
# 选择特定行的多列  --- 返回 DataFrame
subset2 = df.loc[['Alice'], ['Age', 'City']] 
print(subset2)                       #        Age      City
                                    # Name                  
                                    # Alice     24  New York                      
# 如果你对数组索引单个也加上中括号,那么返回的将是 DataFrame 而不是 Series
基于行和列范围的选择(切片) — df.loc[‘Alice’:‘Charlie’, ‘Age’:‘City’]
# 选择行标签在一定范围内的多行和多列
subset = df.loc['Alice':'Charlie', 'Age':'City']
print(subset)                        #          Age         City
                                    # Name                      
                                    # Alice     24     New York
                                    # Bob       27  Los Angeles
                                    # Charlie   22     Chicago
  • 选择行标签从 ‘Alice’ 到 ‘Charlie’(包括)的行,以及从 ‘Age’ 到 ‘City’ 的列。
基于布尔条件的选择 ---- df.loc[df[‘Age’] > 25] , df.loc[df[‘Age’] > 25, [‘City’]]
  • 选择 ‘Age’ 列大于 25 的所有行。
  • 选择 ‘Age’ 列大于 25 的行,并只保留 ‘City’ 列。
subset = df.loc[df['Age'] > 25]
print(subset)                        #        Age         City
                                    # Name                      
                                    # Bob       27  Los Angeles
                                    # David     32     Houston
                                    
subset2 = df.loc[df['Age'] > 25, ['City']]
print(subset2)                      #                City
                                    # Name              
                                    # Bob   Los Angeles
                                    # David     Houston
更新操作
# 更新特定单元格的值
df.loc['Alice', 'Age'] = 30

# 更新满足条件的行的特定列
df.loc[df['Age'] > 25, 'City'] = 'San Francisco'
  • 更新 ‘Alice’ 行的 ‘Age’ 列值为 30。
  • 将 ‘Age’ 列大于 25 的所有行的 ‘City’ 列值更新为 ‘San Francisco’。

(2)iloc[ ] 的使用方法

iloc 用于通过整数位置来选择数据,类似于 NumPy 的数组索引,支持按行、按列或行列组合进行选择。iloc 方法通常有以下几种用法:
创建示例 dataframe

# 创建示例 DataFrame
data = {
   'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [24, 27, 22, 32],
        'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
df.set_index('Name', inplace=True)
print(df)                            #        Age         City
                                    # Name                      
                                    # Alice     24     New York
                                    # Bob       27  Los Angeles
                                    # Charlie   22     Chicago
                                    # David     32     Houston
基于行位置的选择
df.iloc[0]
df.iloc[[0]]
df.iloc[[0,2]]
# 按行位置选择
print(df.iloc[0])             #  Age          24
                              # City    New York
                              # Name: Alice, dtype: object               # Series
                              
print(df.iloc[[0]])           #        Age      City
                              # Name                  
                              # Alice    24  New York                    # DataFrame          
                              
print(df.iloc[[0,2]])         #         Age      City
                              # Name                  
                              # Alice    24  New York
                              # Charlie  22   Chicago
基于行和列位置的选择
df.iloc[0,1] ---- 返回一个标量
df.iloc[0,[0,1]] — 返回series
df.iloc[[0],[0,1]] ---- 返回一个dataframe
print(df.iloc[0,1])                # New York
print(df.iloc[0,0])                # 24

标签:loc,City,df,Age,Alice,DataFrame,----,pd
From: https://blog.csdn.net/smalltorch/article/details/139621443

相关文章

  • numpy基础
    文章目录引言:numpy的常见注意事项1numpy数组是可变数据类型2numpy数组的view视图机制以及与列表的区别2.1numpy数组的view机制2.1.1视图机制的工作原理2.1.2视图的创建方式2.2numpyview机制与列表(没有view机制的数据结构)的区别1.内存管理NumP......
  • Spring AOP
            AOP(AspectOrientedProgramming):面向切编程。是对某⼀类事情的集中处理,例如网站的登录验证,不使用AOP的话发布文章需要一段代码进行验证、编辑文章需要验证......而使用AOP的话只需要在某⼀处配置⼀下,需要验证的地方都可以实现了。        AOP是......
  • Java——变量作用域和生命周期
    一、作用域1、作用域简介在Java中,作用域(Scope)指的是变量、方法和类在代码中的可见性和生命周期。理解作用域有助于编写更清晰、更高效的代码。2、作用域块作用域(BlockScope):块作用域是指在大括号{}内定义的变量的作用域。变量只在其定义的块内可见和有效,包括循环、条件......
  • MySQL数据库初体验
    SQLServer(微软公司产品)1、数据库基本概念(1)数据Data数据就是描述事物的符号记录。主要包括数字,文字、图形、图像、声音、档案记录等。一般以“记录”形式按统一的格式进行存储。(2)表表就是将不同的记录组织在一起。主要是用来存储具体数据。(3)数据库数据库(database)是表的集......
  • java1
    在继承中,创建子类对象,访问成员方法的规则: 创建的对象是谁,就优先用谁,没有再向上找 注意:无论是成员变量还是成员方法, 如果没有都是向上找父类,不会向下找子类继承的特点:子类可以拥有父类的内容,此处子类还可以拥有自己独有的内容(成员变量和方法) 定义继承的格式:(至少需要......
  • C#批量设置海康和大华录像机NVR,GB28181的通道编码.
    我经常要把小区海康或者大华的硬盘录像机推送到自己搭建的gb28181监控平台,每次几百个摄像头编码,有点头大,就用了1个多周写了个批量设置海康和大华硬盘录像机的通道编码的程序,海康和大华的SDK简直不是人看的.太乱了.大华读取通道编码的代码///<summary>......
  • 045篇 - 程序员提示词(Prompts for Programmers)
    大家好,我是元壤教育的张涛,一名知识博主,专注于生成式人工智能(AIGC)各领域的研究与实践。我喜欢用简单的方法,帮助大家轻松掌握AIGC应用技术。我的愿景是通过我的文章和教程,帮助1000万人学好AIGC,用好AIGC。在这一章中,我们将探讨程序员如何通过提示词工程利用ChatGPT的力量。C......
  • Linux项目部署套餐
    第一步准备工作创建一个目录用于存放要用到的工具并上传所需要用到的文件#下载上传需要用到的工具yuminstalllrzsz#创建目录mkdir-p/usr/local/mytools#进入mytools目录下cd/usr/local/mytools#上传可一次性上传jdk,mysql,tomcat,redis压缩包rz第二步安装jd......
  • 博客没人看啊,我分析是这些原因
    1.封面主题封面还是个性化封面?主题封面对系列化很友好,如下图左:在目录中什么主题一目了然,个性化封面在目录中就略显杂乱。但是通过观察CSDN主页发现热榜文章清一色个性化封面。如果使文字封面就会显得很无聊。所以从提高浏览量的角度讲,应使用个性化封面。2.有吸引力的图片......
  • 整理好了!2024年最常见 20 道并发编程面试题(七)
    上一篇地址:整理好了!2024年最常见20道并发编程面试题(六)-CSDN博客十三、请描述什么是生产者-消费者问题以及如何解决它。生产者-消费者问题,也称为有限缓冲问题,是计算机科学和操作系统中的一个经典同步问题。这个问题描述了两个进程组:生产者(Producer)和消费者(Consumer),它们共享......