[英]How to write values from one csv to another on condition using Python
我有 2 个 CSV 文件,在 combine_csv 我有重复的行(故意)。 我正在尝试合并 2 个 CSV,以便将来自另一个文件 (ims_data_new) 的值写入第一个文件的相关单元格和列中。 下面的代码不这样做,它跳过“ActivePositive”列。
我想要的:文件 1:
c1 c2
1 a
2 b
3 c
4 d
5 e
文件2:
c3 c4 c5
1 aa ww
3 bb rr
5 cc tt
和预期的结果:
c1 c2 c4 c5
1 a aa ww
2 b aa ww
3 c bb rr
4 d bb rr
5 e cc tt
到目前为止我的代码:
data = pd.read_csv('.../combined_csv.csv', date_parser='datetime')
ims = pd.read_csv('.../ims_data_new.csv', date_parser='datetime')
# merging the files
f3 = data[["Timestamp",
"ActivePositive"]].merge(ims[["Timestamp",
"Temperature", "Humidity",
"Wind Speed"]],
on = "Timestamp",
how = "right")
# creating a new file
f3.to_excel("../Results.xlsx", index = False)
我是 csv 的新手,真的很难在有条件的情况下写入 csv。
想出 b 字面上的小步骤,这就是我所做的:所以我在两个 csv 中格式化了数据:
data_file = open(path_data, newline='')
reader = csv.reader(data_file)
header = next(reader)
data1 = []
for row in reader:
#print(row[0])
date = datetime.strptime(row[0], '%d-%m-%Y %H:%M')
active_pos = float(row[1])
data1.append([date,active_pos])
ims_file = open(path_ims, newline='')
reader2 = csv.reader(ims_file)
header2 = next(reader2)
data2 = []
for row in reader2:
#print(row[0])
date = datetime.strptime(row[0], '%d-%m-%Y %H:%M')
temperature = float(row[1])
humidity = int(row[2])
windspeed = float(row[3])
data2.append([date,temperature,humidity,windspeed])
然后我只是逐行运行并保存相关值:
res = []
for i in range(len(data2)):
for j in range(len(data1)):
if data1[j][0]==data2[i][0]:
date = data1[j][0]
active_pos = data1[j][1]
temperature = data2[i][1]
humidity = data2[i][2]
windspeed = data2[i][3]
res.append([date,active_pos,temperature,humidity,windspeed])
唯一的问题是我有巨大的文件。 如果有人有更好,更优化的方法来做到这一点,我将不胜感激!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.