python处理excel/csv文件

写在前面:利用python对excel或者csv文件进行预处理,可以避免手工重复操作,节省时间开销并提高工作效率。本文将总结项目中常用的文件处理操作,需用到的python模块有:os、pandas、openpyxl。

大家可以关注我们的公众号,一起学习Python小技巧
在这里插入图片描述
Python学习交流群:773162165
大家可以加群一起学习,有啥不懂的可以在群里问大佬哟!

1、获取文件夹下所有文件
方法一:读取文件夹下所有文件名(不读取子文件夹下文件名,顺序为乱序)

#采用os.listdir()函数
def listdir(path):            #path为文件夹的存储路径
    list_name=[]              #保存所有文件名至列表
    list_dir = os.listdir(path)
    # list_dir.sort(key=lambda x:int(x[:-5])) #若文件名无中文,可对列表进行排序
    for file in list_dir:                     #由于子文件名后缀为.xlsx,因此为-5
        file_path = os.path.join(path, file)
        list_name.append(file_path)
    return list_name

方法二:读取文件夹下指定后缀文件名(包括子文件下文件名,顺序为乱序)

#采用os.walk()方法,读取文件夹中后缀为.csv的文件名
def listdir2(path):          #path为文件夹的存储路径   
    type = ('.csv')	     #可在此处更改文件类型
    list_name = []           #保存所有文件名至列表
    for root, dirs, files in os.walk(path):
        for f in files:
            fname = os.path.join(root, f)
            if fname.endswith(type):
                list_name.append(fname)
    return list_name

2、读取多个excel内容存到list中

#函数的输入为列表,存储着多张excel的文件位置
#函数的输出为二维列表,保存着多张excel的内容
def textList(list_name):      #list_name为多张表的位置信息列表
    text_excel = []           #text_excel为存储多张表的二维列表
    for num in list_name:
        excel = pd.read_excel(num, header=None, skiprows=0)
        excel = excel.values.tolist()
        text_excel.extend(excel)
    return text_excel

3、将二维列表的值写入excel中

#利用openpyxl模块实现,还有一种常用的是利用pandas模块,后续进行介绍
def writeToExcel(file_path, new_list):   #file_path为excel存储路径,new_list为二维列表
    wb = openpyxl.Workbook()
    ws = wb.active
    ws.title = 'feature'
    for r in range(len(new_list)):
        for c in range(len(new_list[0])):
            ws.cell(r + 1, c + 1).value = new_list[r][c]
            # excel中的行和列是从1开始计数的,所以需要+1
    wb.save(file_path)  # 注意,写入后一定要保存
    print("成功写入文件: " + file_path + " !")
    return 1

4、批量更改excel文件名

#批量修改文件中excel文件名,使用到1中listdir()函数
def rename_excel(path, text):  #path为存储文件夹,text为替换的新内容
    list_name = listdir(path)
    for excel_name in list_name:
        new_name = excel_name[:-10] + text + excel_name[-8:]
        os.rename(excel_name, new_name)
    return list_name 
rename_excel(r'D:\test', '27')     

执行效果,文件夹中excel命名如下:
在这里插入图片描述
批量将“26”改为“27”,程序执行结果为:
在这里插入图片描述

5、给csv添加第一列,第一列的值为日期

#给csv添加一列,该列表示时间,全部设为2021-04-26
data = pd.read_csv(r'test.csv',sep=',', header=None,skiprows=1,encoding="gbk")
col_name = data.columns.tolist()           #读取列名,并放入list中
col_name.insert(0,'DATE')                  #给list中插入第一列
new_data = data.reindex(columns=col_name)  #列名重命名
new_data['DATE']='2021-04-26'              #给第一列赋值
new_data.to_csv('new_test.csv',index=0)    #写入新的csv文件

6、批量修改csv中的值,并写入新的csv中

#读取csv的值,第一列为时间类型,大小不变,对其余列生成随机数字
data = pd.read_csv(path, sep=',',header=None, skiprows=1, encoding="gbk")  #原始数据
col_name = list(data)   #返回列名
new_col = col_name[1:]  #取除第一列之外其余列的名称
col = data.shape[1]     #返回列数
index = data.shape[0]   #返回行数
#给其余列随机生成[0-100]之间的数字
new_data_randam = pd.DataFrame(np.random.randint(0,100,size=(index, col-1)), columns = new_col)
new_col_name = new_data_randam.columns.tolist() #生成新的列名
new_col_name.insert(0, 'DATE')                  #插入日期为第一列
new_test_data = new_data_randam.reindex(columns=new_col_name)  #列名重命名
new_test_data['DATE'] = '2021-04-26'            #给第一列进行赋值

7、csv每隔10行取1行,并写入新的csv中

#读取csv的内容,每10条进行抽样,path为csv文件位置,new_path为新的存储位置
data = pd.read_csv(path, sep=',', header=None, skiprows=1, encoding="gbk")
sample = []                                  #存储抽样的行数
for i in range(0, len(data), 10):            #每隔10行取数据
  sample.append(i)
  new_data = data.iloc[sample]               #根据行数对数据进行抽样
  new_data = pd.DataFrame(new_data)
new_data.to_csv(new_path, index=0, header=0)  # 写入新的csv文件

8、csv按列求均值、最大值、最小值,并写入新的csv中

#利用dataframe的.mean().max().min()函数分别求各列的均值、最大值和最小值
#path为csv的存储路径,new_path_mean为均值存储路径,new_path_max为最大值存储路径,new_path_min为最小值存储路径
data = pd.read_csv(path, sep=',', header=None, skiprows=1, encoding="gbk")
data_mean = data.mean(axis=0))   #均值,axis=1时,为对行求均值
data_max =  data.max(axis=0))    #最大值
data_min =  data.min(axis=0)))   #最小值
# 均值写入新的csv文件
data_mean.to_csv(new_path_mean, index=0, header=0, mode='a')   # mode='a'为追加模式
# 最大值写入新的csv文件
data_max.to_csv(new_path_max, index=0, header=0, mode='a')     #mode='w'为写模式
# 最小值写入新的csv文件
data_min.to_csv(new_path_min, index=0, header=0, mode='a')
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值