【问题标题】:How to write values from one csv to another on condition using Python如何使用 Python 在条件下将值从一个 csv 写入另一个
【发布时间】:2020-11-18 18:32:16
【问题描述】:

我有 2 个 CSV 文件,在 combined_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。

【问题讨论】:

    标签: python pandas csv conditional-formatting


    【解决方案1】:

    好像你错过了前面的填充

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

    看看

    forward fill specific columns in pandas dataframe

    【讨论】:

      【解决方案2】:

      想出了 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])
              
      

      唯一的问题是我有大量文件。 如果有人有更好、更优化的方法来做到这一点,我将不胜感激!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多