【发布时间】:2021-12-02 17:28:15
【问题描述】:
我是 python 新手,我使用的是 Python 3.9.6。我有大约 48 个不同的文件,名称中都有“Cam_Cantera_IDT_output_800K_*.csv”。例如:Cam_Cantera_IDT_output_800K_7401.csv 和 Cam_Cantera_IDT_output_800K_8012.csv。所有文件都有一个时间列 t,后跟许多名为 X_oh、X_ch2、X_h20 等的列。我想编写一个代码来处理这 48 个文件中的每一个,并且只获取 t 和 X_ch2 列并将它们保存在一个新文件中。由于所有 48 个文件的时间列都相同,我只想要 1 个时间列 t 后跟 48 个 X_ch2 列,因此总共 49 个列。
我的第一次尝试是使用追加:
#Using .append, this code runs
import pandas as pd
import glob
require_cols = ['t', 'X_ch2']
all_data = pd.DataFrame()
for f in glob.glob("Cam_Cantera_IDT_output_800K_*.csv"):
df = pd.read_csv(f, usecols = require_cols)
all_data = all_data.append(df,ignore_index=True)
all_data.to_csv("new_combined_file.csv")
这段代码运行了,但是它将每个文件一个附加到另一个下面,所以我只有 2 列,一列用于 t,一列用于 X_ch2,但有很多行。后来我读到这就是 append 的作用,它将文件添加到另一个之下。
然后我尝试使用 pd.concat 将列垂直添加到彼此旁边。我使用的代码如下所示。不幸的是,我得到了与 append 相同的结果。我只有 2 列,一列用于时间 t,一列用于 X_ch2,所有文件都添加到彼此下方。
#Attempting using pd.concat, this code runs
import glob
import pandas as pd
file_extension = 'Cam_Cantera_IDT_output_800K_*.csv'
all_filenames = [i for i in glob.glob(f"*{file_extension}")]
require_cols = ['t', 'X_ch2']
combined_csv_data = pd.concat([pd.read_csv(f, usecols = require_cols) for f in all_filenames], axis=0)
print(combined_csv_data)
combined_csv_data.to_csv('combined_csv_data.csv')
我最后一次尝试是使用 pd.merge,我添加了 on='t' 以将其合并到时间列上,这样我只有 1 个时间列。我不断收到我缺少“正确”的错误。但是当我将它添加到该行时,它告诉我没有定义权利:
combined_csv_data = pd.merge(right, [pd.read_csv(f, usecols = require_cols) for f in all_filenames], on='t') => 给出 'right' 没有定义。
我尝试使用 right_on = X_ch2 或 right_index=True 但似乎没有任何效果。
我尝试的原始代码,没有任何'权利'如下所示。
# A merge attempt
#TypeError: merge() missing 1 required positional argument: 'right'
import glob
import pandas as pd
file_extension = 'Cam_Cantera_IDT_output_800K_*.csv'
all_filenames = [i for i in glob.glob(f"*{file_extension}")]
require_cols = ['t', 'X_ch2']
combined_csv_data = pd.merge([pd.read_csv(f, usecols = require_cols) for f in all_filenames], on='t')
print(combined_csv_data)
combined_csv_data.to_csv('combined_csv_data.csv')
任何帮助将不胜感激,谢谢。
【问题讨论】: