[英]Copying one column of a CSV file and adding it to another file using python
[英]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.