python excel读取、修改

1. 读取excel

def read_excel(excel_path):
    """
    读取同一个excel中不同sheet内容
    :param excel_path:
    :param sheet_name:sheet_name='0726' 表示'0726’这个sheet; sheet_name=1 表示第二个sheet ;
    sheet_name=None表示所有sheet;为空,不设置,默认第一个sheet
    :return:
    """
    excel_reader = pd.ExcelFile(excel_path)  # 指定文件
    sheet_names = excel_reader.sheet_names  # 读取文件的所有表单名,得到列表

    print(sheet_names)

    all_data=None
    index=0
    for sheet_name in sheet_names:
        index+=1
        sheet_data = pd.read_excel(excel_path,sheet_name = sheet_name)

        sheet_data=np.array(sheet_data)
        print(sheet_data.shape)

        if index==1:
            all_data=sheet_data
        else:
            all_data=np.vstack((all_data,sheet_data))

        print('current all data:',all_data.shape)

    print('all data:',all_data.shape)

    return all_data

2. 保存excel,追加保存在不同的sheet中,并设置列名

def save_excel(data,excel_path,sheet_name,model):
    """
    将结果写入excel的指定sheet中
    :param data:
    :param excel_path:
    :param sheet_name:
    :model:写入模式,注意如果是在已存在的.xlsx中新增一个sheet,一定要改为a,追加模式,否则会覆盖前面的sheet
    :return:
    """
    data=np.array(data)
    writer = pd.ExcelWriter(excel_path,mode=model)

    df = pd.DataFrame(data,columns=['车牌名', '出车次数','状态'])
    # print(df)
    # 进行排序,先按'状态进行排序,状态一致时,再按次数进行排序'
    df=df.sort_values(by=['状态','出车次数'], ascending=False)
    # print('排序后:')
    # print(df)
    df.to_excel(writer,sheet_name=sheet_name,index=False,encoding='utf-8')
    writer.save()
    writer.close()
# 同时保存两组不同的数据在不同的sheet中
writer = pd.ExcelWriter(excel_path,mode=model)
df1 = pd.DataFrame(data1,columns=['车牌名', '出车次数','状态'])
df2 = pd.DataFrame(data2,columns=['地名', '时间'])
df1.to_excel(writer,sheet_name=sheet_name_1,index=False,encoding='utf-8')
df2.to_excel(writer,sheet_name=sheet_name_2,index=False,encoding='utf-8')
writer.save()
writer.close()
下面是以前的笔记

1. 读取数据

sheets=['第一批','第二批','第三批']
count=0
for sh in sheets:
	print('当前sheet:',sh)
	
	# DataFrame数据,可以转为numpy
	data = pd.read_excel(excel_path,sheet_name=sh)  # 不指定sheet_name默认只读第一个sheet
	
	print(data.shape) #不含表头,data数据也不含表头
	row, col = data.shape[0], data.shape[1]
	print(row, col)
	
	# 遍历获取单元格值
    for r in range(row):
       vin=data.iloc[r,0] # 第一列数据
       vin_type=data.iloc[r,2] #第三列数据

2. 修改数据

data = pd.read_excel(excel_path)
print(data.shape)
row,col=data.shape[0],data.shape[1]
print(row,col)

with open(dayLOGResult,'r',encoding='utf-8') as f:

	lines=f.readlines()
    for line in lines:
    	line=line.strip('\n')
        line=line.split(' ') #有可能两个,有可能三个

		vv=line[0]
		ss=line[1]


        for r in range(row):
            vin=data.iloc[r,0]
            if vv==vin:
            	# 向第二列位置写入值
                if ss=='1':
                    data.loc[r,coll]='1'
                elif ss=='-1':
                    data.loc[r,coll]='-1' #使用iloc报过错
                    
writer = pd.ExcelWriter(excel_path)  # 写入Excel文件
data.to_excel(writer, sheet_name='sheet1', index=False)  # ‘sheet1’是写入excel的sheet名
writer.save()
writer.close()

import pandas as pd

# dtype=str读取内容为str而不是float
# keep_default_na=False 设置读取的空值不为Nan
excel_path='C:/yylog/测试.xlsx'
excel_path_new='C:/yylog/测试_比较结果.xlsx'
df = pd.read_excel(excel_path,dtype=str,keep_default_na=False)

# 插入列
col_name = df.columns.tolist()
print('全部的列:',col_name) #全部的列: ['车牌号', '6月15日', '6月16日', '6月17日', '6月18日', '6月21日']


index = col_name.index('6月21日') + 1
col_name.insert(index, '比较结果')
# df = df.reindex(columns = col_name) #新增一列
print(df)

last_index=col_name.index('比较结果')

row,col=df.shape[0],df.shape[1]
print('行,列:',row,col)

print('比较结果所在列:',last_index)
# 比较前面日期下的值,一行中同时存在1和-1的,将‘发生改变’写入到比较结果列

change=[]
for r in range(row):
    vin=df.iloc[r,0]

    ptos = df.iloc[r, 1:last_index]
    ptos=ptos.values
    print(ptos,type(ptos),type(ptos[0]))

    if '1' in ptos and '-1' in ptos:
        # 两种同时存在时
        df.loc[r,last_index]='是'
        change.append(vin)


    else:
        continue
for v in change:
    print(v)

writer = pd.ExcelWriter(excel_path_new)  # 写入Excel文件
df.to_excel(writer, sheet_name='sheet1', index=False)  # ‘page_1’是写入excel的sheet名
writer.save()
writer.close()


  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值