Arrays 修改已存储在阵列中的多个csv文件
我设法将500个csv文件存储到阵列中,每个csv都有列:Arrays 修改已存储在阵列中的多个csv文件,arrays,python-3.x,csv,Arrays,Python 3.x,Csv,我设法将500个csv文件存储到阵列中,每个csv都有列: time_s|hbaro_m|hdot_1_mps|hralt_m|lon_rad|lat_rad|tas_mps|gs_mps|wow|chi_rad|lap_te_pos| | | | | | | | | | | 其中,每列大约有5k到10k行数据 使用此代码 # import necessa
time_s|hbaro_m|hdot_1_mps|hralt_m|lon_rad|lat_rad|tas_mps|gs_mps|wow|chi_rad|lap_te_pos|
| | | | | | | | | |
其中,每列大约有5k到10k行数据
使用此代码
# import necessary libraries
import pandas as pd
import os
import glob
# use glob to get all the csv files
# in the folder
path = os.getcwd()
csv_files = glob.glob(os.path.join(path, "*.csv"))
# loop over the list of csv files
df = [0 for i in range(500)]
for i in range (500):
# read the csv file
df[i]= pd.read_csv(csv_files[i])
我得到的输出是一个数组,其中每个数组都有每个csv的数组(我不知道如何解释)
像
等
我想稍后修改和交换列(lon_rad
,lat_rad
),这可能吗?如何实现
提前感谢具体来说,您的输出是 如果目录中的csv文件少于500个,代码就会中断
import pandas as pd
from pathlib import Path
def swap_columns(df col1='lon_rad', col2='lat_rad'):
'Return a DataFrame with col1 and col2 swapped'
columns = df.columns.to_list()
try:
col1_idx = columns.index(col1)
col2_idx = columns.index(col2)
# swap the column names
columns[col1_idx], columns[col2_idx] = columns[col2_idx], columns[col1_idx]
except ValueError:
pass # one of the columns is not found, maybe warn?
return df[columns]
csv_files = Path.cwd().glob('*.csv')
# read all csv files
dfs = [pd.read_csv(path) for path in csv_files]
# or read at most 500 csv files if you really want
# dfs = [pd.read_csv(path) for _, path in zip(range(500), csv_files)
dfs = [swap_columns(df) for df in dfs]
我将变量名更改为dfs
,以显示它是多个数据帧的列表,而不仅仅是一个数据帧
注意:这会将所有csv文件读入内存,然后交换列。如果您只想交换csv文件中的列,我会使用生成器而不是列表,这样您就可以一次一个地操作每个文件。这样,csv数据清理步骤不会占用大量内存,可以在小型计算机上完成:
# a generator of tuples (Path, DataFrame)
dfs = ((path, pd.read_csv(path)) for path in csv_files)
dfs = ((path, swap_columns(df)) for path, df in dfs)
for path, df in dfs:
df.to_csv(path)
您的其他操作可以编写为类似swap_列的函数,并以相同的方式映射到列表上
PS此代码将创建的索引列添加到写入的csv中。。考虑使用<代码>索引x> COL >代码>参数> Read Syvv < /Cult> < P> >,您想稍后将结果保存到CSV中,还是只在数组中进行修改?在最后一个例子中,您可以制作如下内容:
df[i]=df[i][['col4','col3']]]
。
# a generator of tuples (Path, DataFrame)
dfs = ((path, pd.read_csv(path)) for path in csv_files)
dfs = ((path, swap_columns(df)) for path, df in dfs)
for path, df in dfs:
df.to_csv(path)