Numpy(第4次作业)
如下列表格所示,有两张后缀名为".csv"的数据文件,记录的是 “五粮液” 与 “云南白药” 在某段时间内,股市交易变化的数据。
五粮液
云南白药
要求:
1, 将这两个文件保存在某个文件夹下,如:D:\Coding\Python\LogicCoding\Data Analyze;
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)