繁体   English   中英

使用Python在CSV文件中添加列

[英]Using Python for adding column in a CSV file

我有csv文件(inputFile),如下所示:

Temperature,2,3
Temperature,5,6
Pressure,11,14,45
Pressure,13,23,16
Humidity,21,24,25
Humidity,27,28,26

我想将其写入另一个文件(outputFile),但格式如下:

Temperature,2,3,Pressure,11,14,45,Humidity,21,24,25
Temperature,5,6,Pressure,13,23,16,Humidity,27,28,26

我尝试了以下Python代码:

 with open('inputFile.csv','r') as csvinput: with open('outputFile.csv','w') as csvoutput: writer = csv.writer(csvoutput, delimiter= ',') writer = csv.writer(csvoutput) for row in csv.reader(csvinput): if (row[0] == "Pressure" or row[0] == "Humidity"): type =row[0] Value = row[1]) writer.writerow(row + [np.asarray(type)] + [np.asarray(Value)]) 

它以以下格式给出输出:

Temperature,2,3,Humidity,27

Temperature,5,6,Humidity,27

Temperature,8,9,Humidity,27

Pressure,11,14,45,Pressure,11

Pressure,13,23,16,Pressure,13

Humidity,21,24,25,Humidity,21

Humidity,27,28,26,Humidity,27

请帮忙!

缺少二进制模式。

为了提高可读性,我建议分开读取,更改数据和写入,因为在写入之前必须先读取整个输入文件。

示例(无错误处理):

  import csv
  f = open('inputFile.csv','rb')
  reader = csv.reader(f)
  data = {}
  keys = set ()
  for row in reader : 
    key = row [0]
    data.setdefault (key, []).append (row) 
  f.close ()
  odata = []
  for (t, p, h) in zip (data ["Temperature"], data ["Pressure"], data   ["Humidity"]) :
    odata.append (t + p + h)
  g = open('outputFile.csv','wb')
  writer = csv.writer (g)
  writer.writerows (odata)
  g.close ()

尝试以wb而不是w打开文件。

这仅适用于在Windows上运行的情况。 这是文件句柄中的行分隔符的问题。

import csv

with open('inputFile.csv','r') as csvinput:
    with open('outputFile.csv','w') as csvoutput:
        writer = csv.writer(csvoutput, delimiter=',')
        types = ('temperature', 'pressure', 'humidity')
        data = {key: [] for key in types}
        for row in csv.reader(csvinput):
            data[row[0].lower()].append(row[1:])
        for entry_no in range(len(data['temperature'])):
            row = []
            for key in types:
                row.extend([key.title()]+data[key][entry_no])
            writer.writerow(row)

如果您可以通过编写inputFile.csv的方式来做任何事情,它将使您的生活更加轻松。 这两种方法都可以解决您的问题。

import pandas as pd

df = pd.read_csv('inputfile.csv', names=['type', 'val1', 'val2', 'val3'])
df = df.T

a = range(0, len(df.columns))
rows = [a[::2], a[1::2]]

dic = {}
for i in range(0, 2):
    dic[i] = [df[df.columns[j]].tolist() for j in rows[i]]
    dic[i] = [j for x in dic[i] for j in x]
    dic[i] = [x for x in dic[i] if str(x) != 'nan']
df1 = pd.DataFrame(dic)
df1.T.to_csv('outputFile.csv', index=False, header=False)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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