Python CSV文件解读详解:一篇文章轻松掌握!

一、CSV文件

        逗号分隔值(Comma-Separated Values,CSV)是一种以纯文本格式存储表格数据的文件格式。每一行代表一条数据记录,每条记录由一个或多个字段组成。字段分隔符默认使用逗号分隔,实际使用中也可以采用其他字符作为分隔符,如分号 ;或制表符 \t等。

1. 基本结构

  • 每一行:表示一条数据记录。
  • 字段:记录中的每个数据项,用字段分隔符分隔。
  • 字段值:文本或数字,可以包含特殊字符。
  • 姓名,年龄,城市
    张三,30,北京
    李四,25,上海
    

    2. 特殊情况

            字段中若包含回车换行符、双引号或者逗号,该字段需要用双引号括起来。如果用双引号括字段,那么出现在字段内的双引号前必须加一个双引号进行转义。

    "aaa","b 
    bb","ccc" 
    "aaa","b""bb","ccc"

    二、Python解析

    1. 数据文件(data.csv)

    id,name,age,city
    1,Alice,30,New York
    2,Bob,25,Los Angeles
    3,Charlie,35,Chicago
    4,David,40,Houston
    

    2. 原生python

            导入csv包之后对文件进行解析。

    import csv
    
    # 1. 读取 CSV 文件
    with open('data.csv', mode='r', newline='', encoding='utf-8') as file:
        reader = csv.reader(file)
        data = list(reader)
    
    # 2. 取行/列数据
    # 取第二行数据
    print("\n第二行数据:", data[1])
    
    # 取第三列数据
    column_index = 2
    column_data = [row[column_index] for row in data]
    print("\n第三列数据:", column_data)
    
    # 3. 遍历数据
    print("\n遍历数据:")
    for row in data:
        print(row)
    
    # 4. 批量修改某行/列数据
    # 批量修改第二行数据
    new_row_data = ['5', 'Eva', '28', 'San Francisco']
    data[1] = new_row_data
    
    # 批量修改第三列数据
    new_column_data = ['31', '26', '36', '41']
    for i, row in enumerate(data[1:], start=1):  # Skip header row
        row[column_index] = new_column_data[i - 1]
    
    # 5. 修改某个具体的值
    # 修改第一行第二列的具体值
    data[0][1] = 'Alicia'
    
    # 6. 增加某行/列数据
    # 增加新行
    new_row = ['5', 'Eva', '28', 'San Francisco']
    data.append(new_row)
    
    # 增加新列
    new_column_data = ['USA'] * len(data)  # New column data
    for row, value in zip(data, new_column_data):
        row.append(value)
    
    # 7. 删除某行/列数据
    # 删除第二行
    del data[1]
    
    # 删除第三列
    for row in data:
        del row[2]
    
    # 8. 存储数据
    # 保存修改后的数据
    with open(file_path, mode='w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerows(data)
    
    print("\n修改后的数据:")
    for row in data:
        print(row)

    3. pandas

            导入pandas包之后对文件进行解析。

    import pandas as pd
    # 1. 读取 CSV 文件
    df = pd.read_csv('data.csv')
    
    # 2. 取行/列数据
    # 取第一行数据
    print("\n第一行数据:")
    print(df.iloc[0])
    
    # 取 'name' 列的数据
    print("\n'name' 列的数据:")
    print(df['name'])
    
    # 3. 遍历数据
    print("\n遍历数据:")
    for index, row in df.iterrows():
        print(f"ID: {row['id']}, Name: {row['name']}, Age: {row['age']}, City: {row['city']}")
    
    # 4. 批量修改某行/列数据
    # 修改 'age' 列中所有人的年龄,加5岁
    df['age'] = df['age'] + 5
    
    # 修改 'city' 列中 'New York' 的值为 'NYC'
    df.loc[df['city'] == 'New York', 'city'] = 'NYC'
    
    # 5. 修改某个具体的值
    # 修改 ID 为 2 的人的 'age' 为 28
    df.loc[df['id'] == 2, 'age'] = 28
    
    # 删除 'city' 列
    df = df.drop(columns=['city'])
    
    # 6. 增加行/列,并填充数据
    # 增加一列 'email' 并填充默认值 'unknown'
    df['email'] = 'unknown'
    
    # 增加一行数据
    new_row = {'id': 5, 'name': 'Eve', 'age': 22, 'email': 'eve@example.com'}
    df.loc[len(df)] = new_row
    
    # 7. 删除某行/列数据
    # 删除 ID 为 4 的行
    df = df[df['id'] != 4]
    
    # 删除 'city' 列
    df = df.drop(columns=['city'])
    
    # 8. 存储数据
    df.to_csv('modified_data.csv', index=False)
    
    print("\n修改后的数据:")
    print(df)

            to_csv函数详解:

    DataFrame.to_csv(path_or_buf=None, sep=', ', na_rep='', float_format=None,
                    columns=None, header=True, index=True, index_label=None, mode='w',
                    encoding=None, compression=None, quoting=None, quotechar='"',
                    line_terminator='\n', chunksize=None, tupleize_cols=None, 
                    date_format=None, doublequote=True,escapechar=None, decimal='.')

            重要参数:

  • columns : 列名

  • sep : 字段分隔符,默认为 ,

  • index : 是否保存索引,默认为 True

  • header : 是否保存列名,默认为 True

  • na_rep : 替换空数据的字符串,默认为 ‘’

  • float_format : 设置浮点数的格式(保留位数)

  • path_or_buf : 文件路径,如果没有指定则将会直接返回字符串的 json

  • 作者有话说:为了快速上手,对于CSV文件数据取出来之后的数据操作从各个方面给了简单的demo。以取列值和行值为例(特别是pandas),根据数据情况有很多种方式,其中不乏简单便捷的,可以找具体的教程进行学习。

    作者:五碗火锅

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python CSV文件解读详解:一篇文章轻松掌握!

    发表回复