我的写法如下,有高效的写法嘛;
不是合并,每份csv都要有变量名,方便后面调用
df1 = 读取第1份csv
df2 = 读取第2份csv
…
dfn = 读取第n份csv
可以使用列表和循环来简化这段代码,将读取csv文件的操作放在循环体中进行,这样可以避免手动多次定义df变量。
例如:
import pandas as pd
file_names = ['path/to/file1.csv',
'path/to/file2.csv',
...,
'path/to/filen.csv']
dfs = []
for file_name in file_names:
df = pd.read_csv(file_name)
dfs.append(df)
通过定义一个包含所有csv文件名的列表 file_names ,然后在循环中对每个文件进行读取,并将结果存储在dfs列表中。最终,dfs中包括了n个DataFrame对象,每个对象代表着一份csv数据,可以根据需要进行调用和处理。
用pandas已经最高效了,关键看你下面做什么,如果只需要加载一部分或者一些文件,那么没必要一开始就统统加载
不知道你这个问题是否已经解决, 如果还没有解决的话:我可以通过以下步骤优化处理n份带有变量名的csv数据的效率: 1. 将多个csv文件合并成一个大的csv文件,方便一次性读取和处理。 2. 使用pandas库读取csv文件,并将每个文件的变量名记录在变量中,以便后续调用。 3. 将每个csv文件的数据读取后合并成一个大的数据集合,进行统一处理。 具体代码如下:
import os
import pandas as pd
# 首先将多个csv文件合并成一个大的csv文件
csv_path = 'csv_path/'
csv_files = os.listdir(csv_path)
with open('merged.csv', 'w', encoding='utf-8') as f:
for file in csv_files:
file_path = os.path.join(csv_path, file)
with open(file_path, 'r', encoding='utf-8') as file_read:
content = file_read.read()
f.write(content)
# 读取csv文件,将每个文件的变量名记录在变量中
df = pd.read_csv('merged.csv')
var_names = []
for i in range(0, len(csv_files)):
var_names.append(df.columns[i * 10:(i + 1) * 10].tolist())
# 将每个csv文件的数据读取后合并成一个大的数据集合,进行统一处理
data_list = []
for i in range(0, len(csv_files)):
data_path = os.path.join(csv_path, csv_files[i])
data = pd.read_csv(data_path, header=None, skiprows=1)
data.columns = var_names[i]
data_list.append(data)
merged_data = pd.concat(data_list, axis=0, ignore_index=True)
其中: - csv_path为存放csv文件的路径,csv_files为该路径下的所有csv文件名列表。 - 第一个with open打开文件并写入文件内容,将多个csv文件合并成一个大的csv文件’mrege.csv‘。 - 使用pandas的read_csv函数读取合并后的csv文件,并将每个文件的变量名记录在列表var_names中。 - 使用pd.read_csv函数分别读取每个csv文件的数据,并将变量名添加到每列数据前作为列名(注意跳过每个csv文件开头的变量名行),然后将各个csv数据合并成一个名为merged_data的dataframe对象。
这样一来就可以一次读取所有csv数据并统一处理,大大提高了效率。