数据分析作业——Numpy(第4次作业)

Numpy(第4次作业)

如下列表格所示,有两张后缀名为".csv"的数据文件,记录的是 “五粮液” 与 “云南白药” 在某段时间内,股市交易变化的数据。

五粮液
数据分析作业——Numpy(第4次作业)
云南白药
数据分析作业——Numpy(第4次作业)
要求:
1, 将这两个文件保存在某个文件夹下,如:D:\Coding\Python\LogicCoding\Data Analyze;
数据分析作业——Numpy(第4次作业)
2,转换工作路径并使用OS模块获取该文件夹下所有文件列表,但只返回csv文件格式的文件名列表;
3,读取后缀名为 “.csv” 的数据文件,并将多张表中的数据通过 “行堆叠” 的形式拼接在一起;
4,将合并后的数据保存到一个名为 “MergeData.csv” 的文件中。

实现代码如下:

第1种方法

# -*- coding: utf-8 -*-
"""
Created on Mon Jan 18 16:29:28 2021

@author: 清弦墨客(聆听)
"""

import os
import numpy as np

# 定义一个函数,从指定路径中获取文件名列表
def getFileNames(path):
    
    # 修改当前路径
    os.chdir(path=path)
    
    # 获取路径下的文件信息
    files = os.listdir(path)

    # 只返回csv格式的文件
    csv_files = []
    
    for file in files:
        if file.endswith(".csv"):
            csv_files.append(file)
    
    return csv_files

# 定义一个函数,从指定的文件名列表中打开文件并合并文件数据
def mergeData(file_names):
    # 创建一个空的数组,用来保存数据
    arr = np.array([])
    
    # 遍历文件,打开文件,读取文件
    for i in range(len(file_names)):
        """
        # 使用numpy读取数据文件
        # 因为数据文件中既有字符串又有数值,所以使用dtype="object"来读取
        # 如果读取的是第一张表,则保留表头,否则不保留表头
        """
        if i == 0:
            stock = np.loadtxt(file_names[i], delimiter=",", dtype="object")
            # 添加首张文件的数据到arr
            arr = stock
        else:
            stock = np.loadtxt(file_names[i], delimiter=",", dtype="object", skiprows=1)
            # 余下文件的数据垂直拼接到arr,需注意参数是元组的形式
            np.vstack((arr, stock))
    
    # 保存文件
    np.savetxt("DataMerge.csv", arr, delimiter=",", fmt="%s")
    
# 主函数入口
if __name__ == "__main__":
    # 先获得数据文件的文件名
    path = r"D:\Coding\Python\LogicCoding\Data Analyze"
    # 获得文件名列表
    file_names = getFileNames(path)
    # 将文件的路径补充完整
    for i in range(len(file_names)):
        file_names[i] = path + "\\" + file_names[i]
    # 显示文件的完整路径名
    # print(file_names)
    
    # 打开并合并文件数据
    mergeData(file_names)

第2种方法

使用Pandas库实现 “.csv” 文件的读取。

# -*- coding: utf-8 -*-
"""
Created on Mon Jan 18 17:46:16 2021

@author: 清弦墨客(聆听)
"""
import os
import pandas as pd
import numpy as np

# 定义一个函数,从指定路径中获取文件名列表
def getFileNames(path):
    
    # 修改当前路径
    os.chdir(path=path)
    
    # 获取路径下的文件信息
    files = os.listdir(path)

    # 只返回csv格式的文件
    csv_files = []
    
    for file in files:
        if file.endswith(".csv"):
            csv_files.append(file)
    
    return csv_files

# 定义一个函数,使用pandas从指定的文件名列表中打开文件并合并文件数据
def mergeData(file_names):
    # 创建一个空的DataFrame
    df = pd.DataFrame()
    
    # 使用pandas从文件名列表中读取数据
    for i in range(len(file_names)):
        if i == 0:
            csv_data = pd.read_csv(file_names[i])
            df = csv_data
        else:
            csv_data = pd.read_csv(file_names[i])
            # 合并数据,合并时忽略首行
            df = df.append(csv_data.iloc[1:])
    print(df)
    # 保存数据, 不保留行索引
    df.to_csv('DataMerge1.csv', index=0) 
    
# 主函数入口
if __name__ == "__main__":
    # 先获得数据文件的文件名
    path = r"D:\Coding\Python\LogicCoding\Data Analyze"
    # 获得文件名列表
    file_names = getFileNames(path)
    # 将文件的路径补充完整
    for i in range(len(file_names)):
        file_names[i] = path + "\\" + file_names[i]
    # 显示文件的完整路径名
    # print(file_names)
    
    # 打开并合并文件数据
    mergeData(file_names)
上一篇:VS+Yolov3+QT+opencv(GPU版)


下一篇:DataWhale组队--前沿分析Day2