DataFrame 基本小操作

这篇博客详细介绍了如何使用Python的pandas库从Excel文件中读取数据,并创建DataFrame对象。通过示例展示了DataFrame的基本操作,如增删改查、列操作以及数据写入Excel和JSON文件。此外,还探讨了如何遍历DataFrame的不同方式。
摘要由CSDN通过智能技术生成

excel 使用的数据

# -*- coding: utf-8 -*-
# create time    : 2021-05-28 16:27
# author  : CY
# file    : data_frame.py
# modify time:
import json

import openpyxl
import pandas


def data_frame_start():
    """学习DataFrame
    前提:我从excel中读取下面的数据
        name   sex  id_num              phone
    1    张一一  男   512902197002080001  18160120001
    2    李二二  女   512902197002080002  18160120002
    3    王三三  男   512902197002080003  18160120003
    4    赵四四  男   512902197002080004  18160120004
    5    冯五五  男   512902197002080005  18160120005
    那么前面的 12345 就是在excel 中 他们的索引(行) 姓名 身份证号码等 就是他们的列名称
    """
    file_path = r"C:\Users\CY\Desktop\worker.xlsx"
    wb1 = openpyxl.load_workbook(filename=file_path)
    sheets = wb1.sheetnames  # 获取所有的表格
    sheet_name_dict = {
        'worker_info': {'row': 6, 'col': 4}
    }
    data_frame_list = []
    data_frame_dict = {}
    for sheet in sheets:
        if sheet not in sheet_name_dict.keys():
            continue
        else:
            max_row = sheet_name_dict[sheet]['row']
            max_col = sheet_name_dict[sheet]['col']
        ws = wb1[sheet]
        '''读取行'''
        for row in ws.iter_rows(min_row=1, min_col=1, max_col=max_col, max_row=max_row):
            info_list = [read_data.value for read_data in row]
            data_frame_list.append(info_list)
        '''读取列'''
        for col in ws.iter_cols(min_row=1, min_col=1, max_col=max_col, max_row=max_row):
            col_info_list = [read_data.value for read_data in col]
            '''
            print(col_info_list)
            ['name', '张一一', '李二二', '王三三', '赵四四', '冯五五']
            ['sex', '男', '女', '男', '男', '男']
            ['id_num', '512902197002080001', '512902197002080002', '512902197002080003', '512902197002080004', '512902197002080005']
            ['phone', 18160120001, 18160120002, 18160120003, 18160120004, 18160120005]
            '''
            data_frame_dict[col_info_list[0]] = col_info_list[1:]
    '''通过数组创建'''
    # df = pandas.DataFrame(data_frame_list)
    '''
                   0    1                   2            3
            0   name  sex              id_num        phone
            1    张一一    男  512902197002080001  18160120001
            2    李二二    女  512902197002080002  18160120002
            3    王三三    男  512902197002080003  18160120003
            4    赵四四    男  512902197002080004  18160120004
            5    冯五五    男  512902197002080005  18160120005     
    '''
    '''通过字典创建'''
    # df = pandas.DataFrame(data_frame_dict)
    '''
                name sex              id_num        phone
            0    张一一   男  512902197002080001  18160120001
            1    李二二   女  512902197002080002  18160120002
            2    王三三   男  512902197002080003  18160120003
            3    赵四四   男  512902197002080004  18160120004
            4    冯五五   男  512902197002080005  18160120005
    '''
    '''两个出现的结果 大概相同,为啥呢?
    通过list创建的,行索引(index)与列索引(columns)没有指定,产生了自动生成的索引,是把name sex 等key 当成了 使用的数据
    通过dict 创建 同样是 行索引没有指定,但是它列索引默认是使用dict 的key,
    '''
    '''把list 改成与dict 相同'''
    df = pandas.DataFrame(data_frame_list[1:], columns=data_frame_list[0])
    '''
                name sex              id_num        phone
            0    张一一   男  512902197002080001  18160120001
            1    李二二   女  512902197002080002  18160120002
            2    王三三   男  512902197002080003  18160120003
            3    赵四四   男  512902197002080004  18160120004
            4    冯五五   男  512902197002080005  18160120005
    '''

    '''列:增 改 删 查'''
    df['job'] = ['11', '22', '33', '', 55]
    df['job'] = ['11', '22', '33', '44', '']
    df.pop('job')
    print(df['name'])
    '''
        0    张一一
        1    李二二
        2    王三三
        3    赵四四
        4    冯五五
    '''
    '''行:增 改 查 删'''
    df.loc[5] = ['钱六六', '女', '512902197002080006', '18160120005']
    df.loc[5] = ['孙六六', '女', '512902197002080006', '18160120005']
    print(df.loc[5])
    print(df.index)
    '''
        name                     孙六六
        sex                        女
        id_num    512902197002080006
        phone            18160120005
        Name: 5, dtype: object
    '''
    df.drop(labels=[5], inplace=True)
    '''或者'''
    # df = df.drop(index=5)
    '''
        labels 就是要删除的行列的名字,用列表给定
        axis 默认为0,指删除行,因此删除columns时要指定axis=1;
        index 直接指定要删除的行
        columns 直接指定要删除的列
        inplace=False,默认该删除操作不改变原数据,而是返回一个执行删除操作后的新dataframe;
        inplace=True,则会直接在原数据上进行删除操作,删除后无法返回。
    '''
    '''同理 只想更换某个单元数据'''
    df.iat[0, 0] = '张一二'
    print(df)
    print(df.iat[0, 0])
    '''把数据写进worker_write.xlsx'''
    file_path_write_excel = r"C:\Users\CY\Desktop\worker_write.xlsx"
    sheet_name = 'write_info'
    df.to_excel(file_path_write_excel, sheet_name=sheet_name)
    '''把数据写进worker_write.json'''
    file_path_write_json = r"C:\Users\CY\Desktop\worker_write.json"
    df.to_json(file_path_write_json, orient='records')
    with open(file_path_write_json, 'r') as file_json:
        read_json_info = json.load(file_json)
        print(read_json_info)
    '''df.to**自己去尝试吧'''

    '''遍历读取DataFrame 按行 iterrows'''
    for index, row in df.iterrows():
        print(type(row['name']))
        print(row['name'], row['sex'], row['id_num'], row['phone'])

    '''按行遍历 itertuples'''
    for row in df.itertuples():
        print(row)
        print(type(getattr(row, 'name')))
        print(getattr(row, 'name'), getattr(row, 'sex'), getattr(row, 'id_num'), getattr(row, 'phone'))
    '''
    print(row)
    Pandas(Index=0, name='张一二', sex='男', id_num='512902197002080001', phone=18160120001)
    print(type(getattr(row, 'name')))
    <class 'str'>
    getattr() 函数用于返回一个对象属性值
    getattr(object, name[, default])
        object -- 对象。
        name -- 字符串,对象属性。
        default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。
    '''
    '''按列遍历 iteritems'''
    for key, col_value in df.iteritems():
        for sub_col_value in col_value.iteritems():
            print(type(sub_col_value))
            print(key, sub_col_value[1])
    '''
        <class 'tuple'>
        name 张一二
        <class 'tuple'>
        name 李二二
        <class 'tuple'>
        name 王三三
        <class 'tuple'>
        name 赵四四
    '''


if __name__ == '__main__':
    data_frame_start()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值