python pandas 把数据保存成csv文件,以及读取csv文件获取指定行、指定列数据

本文涉及的产品
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,图像资源包5000点
视觉智能开放平台,视频资源包5000点
简介: 该文档详细介绍了如何使用Python的Pandas库处理图像数据集,并将其保存为CSV文件。示例数据集位于`test_data`目录中,包含5张PNG图片,每张图片名中的数字代表其标签。文档提供了将这些数据转换为CSV格式的具体步骤,包括不同格式的数据输入方法(如NumPy数组、嵌套列表、嵌套元组和字典),以及如何使用`pd.DataFrame`和`to_csv`方法保存数据。此外,还展示了如何读取CSV文件并访问其中的每一行和每一列数据,包括获取列名、指定列数据及行数据的操作方法。

1 数据说明

1、在test_data目录下是我们的数据集(我虚构的,只是为了说明下面的处理过程)

image.png

  • 每张图片名中的数字是样本数据的标签label
  • 这里我们的数据规模大小是5张数据

2、数据保存成csv文件要求

  • 每一行代表一个样本
  • 每一行的第一列表示文件的路径,每一行的第二列表示样本的标签

2 把数据集文件信息使用python pandas保存成csv文件

1、根据上面保存成csv文件的要求,把数据集相关信息保存到csv文件中:

# coding=utf-8
"""
Copyright (c) 2018-2022. All Rights Reserved.

@author: shliang
@email: shliang0603@gmail.com

创建和导入csv文件
"""


import pandas as pd
import glob
import os
import numpy as np

# 创建csv文件
def create_csv_file():
    '''
    把test_data目录下的文件绝对路径保存到csv文件中,同时把文件名中的label也保存下来
    保存两列  filename, label
    :return:
    '''
    img_paths_list = glob.glob("../test_data/*.png")
    labes_list = []
    img_label_list = []
    for path in img_paths_list:
        img_name = os.path.split(path)[-1]
        prefix = os.path.splitext(img_name)[0]
        label = prefix.split('_')[-1]
        labes_list.append(str(label))
        # abspath = os.path.abspath(path)
        img_label_list.append([path, label])


    # 通过zip函数组合每一个样本的path和label: (path, label)
    print(img_paths_list)
    print(labes_list)
    img_label_list2 = list(zip(img_paths_list, labes_list))
    print(img_label_list)
    print(img_label_list2)

    # 保存数据data格式,嵌套列表,每个子列表中表示每一行数据
    # df = pd.DataFrame(data=np.array([[img0, label0],[img1, label1],...,[img4, label4]]),
    #                   columns=['filepath', 'label'])
    df1 = pd.DataFrame(data=img_label_list,
                      columns=['filepath', 'label'])
    df1.to_csv('../test_data/filename1.csv')
    df1.to_csv('../test_data/filename2.csv', index=False)

    # 保存数据data格式,列表中嵌套元组,每个元组中表示每一行数据
    df3 = pd.DataFrame(data=img_label_list2,
                      columns=['filepath', 'label'])
    df3.to_csv('../test_data/filename3.csv')

    # 保存数据data格式,字典格式,key表示列名,value是列表,表示每一列数据
    df4 = pd.DataFrame({
   
   "filename": img_paths_list, "label": labes_list})
    df4.to_csv('../test_data/filename4.csv')

if __name__ == '__main__':
    create_csv_file()

输出结果:

在这里插入图片描述

2、pd.DataFrame(data, columns)的参数

data参数:是输入要保存的数据

该参数的值有几种输入格式,都是可以的:

  • 1)numpy格式data=np.array([[img0, label0],[img1, label1],...,[img4, label4]]
  • 2)列表嵌套列表格式:保存数据data格式,嵌套列表,每个子列表中表示每一行数据:data=[[img0, label0],[img1, label1],...,[img4, label4]]
  • 3)列表嵌套元组格式:保存数据data格式,列表中嵌套元组,每个元组中表示每一行数据:data=[(img0, label0),(img1, label1),...,(img4, label4)]
  • 4)字典格式:保存数据data格式,字典格式,key表示列名,value是列表,表示每一列数据:data={'columns_name1':[img0, img1,...,img4], 'columns_name2': [label0, label1,...,label4]}

columns参数是每一列的列名,值是列名的列表

3、df1.to_csv('../test_data/filename1.csv')的参数,这里只说两个比较常用的参数

  • path_or_buf参数:保存csv文件名
  • index参数:默认值是True,表示保存每行的行索引,如果设置位False表示不保存行索引!

filename1.csv:默认是保存了行索引(filename3.csv和filename4.csv的内容也是如下,一样的!)

image.png

filename2.csv:没有保存行索引

image.png

注意:

我们一般保存的CSV文件是不需要保存索引的,直接设置为False吧,否则这个索引也会作为单独的一列数据

3 使用python pandas 读取csv的每行、每列数据

1、直接上代码,我打印出了每一步的结果,方便大家理解!

# coding=utf-8
"""
Copyright (c) 2018-2022. All Rights Reserved.

@author: shliang
@email: shliang0603@gmail.com

创建和导入csv文件
"""


import pandas as pd
import glob
import os
import numpy as np

# 读取csv文件
def read_csv_file():
    '''
    下面我们来读取数据拿到上面创建的csv文件,主要操作:
    - 读取每一行数据:一行代表一个样本
    - 读取每一列数据:一列表示所有样本的一个属性
    :return:
    '''
    data_info1 = pd.read_csv('../test_data/filename1.csv')
    data_info2 = pd.read_csv('../test_data/filename2.csv')

    print(type(data_info1))  # <class 'pandas.core.frame.DataFrame'>

    # 查看前几行数据
    print(data_info1.head())  # 默认查看前5行数据
    print(data_info1.head(3))  # 指定查看的数据行数
    print(data_info2.head())
    '''
           Unnamed: 0                 filepath  label
    0           0  ../test_data\test_0.png      0
    1           1  ../test_data\test_1.png      1
    2           2  ../test_data\test_2.png      2
    3           3  ../test_data\test_3.png      3
    4           4  ../test_data\test_4.png      4
       Unnamed: 0                 filepath  label
    0           0  ../test_data\test_0.png      0
    1           1  ../test_data\test_1.png      1
    2           2  ../test_data\test_2.png      2
                      filepath  label
    0  ../test_data\test_0.png      0
    1  ../test_data\test_1.png      1
    2  ../test_data\test_2.png      2
    3  ../test_data\test_3.png      3
    4  ../test_data\test_4.png      4
    '''

    # 获取数据的行和列数据
    print(data_info1.shape)  # (5, 3)   # 5行、3列数据,每一行表示一个样本数据,这里的第一列是行索引
    print(data_info2.shape)  # (5, 2)

    # 获取每一列的数据类型
    print(data_info1.dtypes)
    print(data_info2.dtypes)
    '''
    Unnamed: 0     int64
    filepath      object
    label          int64
    dtype: object
    filepath    object
    label        int64
    dtype: object
    '''

    ################################################################################################
    # 获取列名
    columns1 = data_info1.columns
    columns2 = data_info2.columns
    print('coloumns1:', columns1)
    print('coloumns2:', columns2)
    # 把列名转换成列表   to_list() 或 tolist() 两种方法是一样的,源码中有赋值to_list = tolist
    columns1_list = data_info1.columns.tolist()
    columns2_list = data_info2.columns.to_list()
    print('coloumns1 list:', columns1_list)
    print('coloumns2 list:', columns2_list)
    '''
    coloumns1: Index(['Unnamed: 0', 'filepath', 'label'], dtype='object')
    coloumns2: Index(['filepath', 'label'], dtype='object')
    coloumns1 list: ['Unnamed: 0', 'filepath', 'label']
    coloumns2 list: ['filepath', 'label']
    '''

    # 获取指定列数据
    filenames1 = data_info1['filepath']
    filenames2 = data_info1[['filepath']]
    # 获取指定多列数据,把要获取的列名放到一个列表中,确保你的列名正确并存在,否则报KeyError
    filenames3 = data_info1[['filepath', 'label']]
    print('filenames1:', filenames1)
    print('filenames2:', filenames2)
    print('filenames3:', filenames3)
    # 把获取的某一列数转换成列表
    filename1_list = data_info1['filepath'].tolist()
    print('filenames1 list:', filename1_list)
    '''
        filenames1: 0    ../test_data\test_0.png
    1    ../test_data\test_1.png
    2    ../test_data\test_2.png
    3    ../test_data\test_3.png
    4    ../test_data\test_4.png
    Name: filepath, dtype: object
    filenames2:                   filepath
    0  ../test_data\test_0.png
    1  ../test_data\test_1.png
    2  ../test_data\test_2.png
    3  ../test_data\test_3.png
    4  ../test_data\test_4.png
    filenames3:                   filepath  label
    0  ../test_data\test_0.png      0
    1  ../test_data\test_1.png      1
    2  ../test_data\test_2.png      2
    3  ../test_data\test_3.png      3
    4  ../test_data\test_4.png      4
    filenames1 list: ['../test_data\\test_0.png', '../test_data\\test_1.png', '../test_data\\test_2.png', '../test_data\\test_3.png', '../test_data\\test_4.png']
    '''
    ################################################################################################
    # 获取某些行数据

    # 去除指定的某一行数据,索引是从0开始的,如下是取出第3行数据。(如果超过行索引会报KeyError)
    # object 表示字符串类型的值
    line3 = data_info2.loc[2]
    print(line3)
    '''
    filepath    ../test_data\test_2.png
    label                             2
    Name: 2, dtype: object
    '''
    # 取出指定的某一行数据,并转换成列表
    line3_list = data_info2.loc[2].tolist()
    print('line3 list:', line3_list)  # line3 list: ['../test_data\\test_2.png', 2]

    # 取出指定的多行数据,如下取出第2行和第4行数据
    multi_line_data = data_info2.loc[[1, 3]]
    print(multi_line_data)  #  得到的对象是DateFrame,还可以对齐进行行列等操作
    '''
                      filepath  label
    1  ../test_data\test_1.png      1
    3  ../test_data\test_3.png      3
    '''

    # 取出连续多行数据,如下取出第2到第5行数据
    mulut_conti_line_data = data_info2.loc[1:5]
    print(mulut_conti_line_data)   # 得到的对象是DateFrame,还可以对齐进行行列等操作
    '''
                      filepath  label
    1  ../test_data\test_1.png      1
    2  ../test_data\test_2.png      2
    3  ../test_data\test_3.png      3
    4  ../test_data\test_4.png      4
    '''


    # 对DataFrame的每一行进行循环
    for index, row in data_info2.iterrows():
        # print(row)
        '''
        filepath    ../test_data\test_0.png
        label                             0
        Name: 0, dtype: object
        '''

        # 然后根据列名,获取指定的行对应指定列的数据
        filepath = row['filepath']
        label = row['label']
        print(filepath, label)  # ../test_data\test_0.png 0

if __name__ == '__main__':
    read_csv_file()

如果你想了解更多关于pandas的使用技巧可以参考这篇文章

目录
相关文章
|
1天前
|
Python
python pandas学习(一)
该代码段展示了四个主要操作:1) 删除指定列名,如商品id;2) 使用正则表达式模糊匹配并删除列,例如匹配订单商品名称1的列;3) 将毫秒级时间戳转换为带有时区调整的日期时间格式,并增加8小时以适应本地时区;4) 将列表转换为DataFrame后保存为Excel文件,文件路径和名称根据变量拼接而成。
12 3
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
4天前
|
数据采集 数据可视化 数据处理
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
57 31
|
5天前
|
数据采集 并行计算 数据可视化
Pandas高级数据处理:数据报告生成实战指南
数据报告生成面临数据质量、计算性能、呈现形式和自动化等核心挑战。常见问题包括缺失值导致统计失真、内存溢出及可视化困难。解决方案涵盖数据清洗、分块处理、安全绘图模板等。通过模块化设计、异常处理机制和性能优化策略,如使用`category`类型、并行计算等,可大幅提升效率。最佳实践建议建立数据质量检查清单、版本控制和自动化测试框架,确保系统具备自适应能力,提升报告生成效率300%以上。
38 12
|
6天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
11天前
|
监控 物联网 数据处理
Pandas高级数据处理:数据流式计算
本文介绍了如何使用 Pandas 进行流式数据处理。流式计算能够实时处理不断流入的数据,适用于金融交易、物联网监控等场景。Pandas 虽然主要用于批处理,但通过分块读取文件、增量更新 DataFrame 和使用生成器等方式,也能实现简单的流式计算。文章还详细讨论了内存溢出、数据类型不一致、数据丢失或重复及性能瓶颈等常见问题的解决方案,并建议在处理大规模数据时使用专门的流式计算框架。
138 100
Pandas高级数据处理:数据流式计算
|
28天前
|
机器学习/深度学习 搜索推荐 数据挖掘
Pandas数据应用:广告效果评估
在数字化营销中,广告效果评估至关重要。Pandas作为Python的强大数据分析库,在处理广告数据时表现出色。本文介绍如何使用Pandas进行广告效果评估,涵盖数据读取、预览、缺失值处理、数据类型转换及常见报错解决方法,并通过代码案例详细解释。掌握这些技能,可为深入分析广告效果打下坚实基础。
41 17
|
29天前
|
数据采集 供应链 数据可视化
Pandas数据应用:供应链优化
在当今全球化的商业环境中,供应链管理日益复杂。Pandas作为Python的强大数据分析库,能有效处理库存、物流和生产计划中的大量数据。本文介绍如何用Pandas优化供应链,涵盖数据导入、清洗、类型转换、分析与可视化,并探讨常见问题及解决方案,帮助读者在供应链项目中更加得心应手。
50 21
|
30天前
|
数据采集 存储 供应链
Pandas数据应用:库存管理
本文介绍Pandas在库存管理中的应用,涵盖数据读取、清洗、查询及常见报错的解决方法。通过具体代码示例,讲解如何处理多样数据来源、格式不一致、缺失值和重复数据等问题,并解决KeyError、ValueError等常见错误,帮助提高库存管理效率和准确性。
106 72
|
1月前
|
机器学习/深度学习 数据采集 供应链
Pandas数据应用:销售预测
本文介绍如何使用Pandas进行销售预测。首先,通过获取、清洗和可视化历史销售数据,确保数据质量并理解其特征。接着,进行特征工程,构建线性回归等模型进行预测,并评估模型性能。最后,针对常见问题如数据类型不匹配、时间格式错误、内存不足和模型过拟合提供解决方案。掌握这些步骤,可有效提升销售预测的准确性,助力企业优化库存管理和提高客户满意度。
55 17

热门文章

最新文章

推荐镜像

更多