繁体   English   中英

如何使用 Python 在条件下将值从一个 csv 写入另一个

[英]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。

好像你错过了向前填充

cols = ['c4', 'c5']
df.loc[:,cols] = df.loc[:,cols].ffill()

看一下

前向填充熊猫数据框中的特定列

想出 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM