[英]How to multiply one column by another in a csv file and re-write
我有一些csv格式的數據,我需要將第三列與第六列相乘,並將結果附加到末尾。 我的數據如下:
TITLE,TITLE,T,T,T,T
data,data,5,data,data,98.7,data
data,data,2,data,data,97,data
data,data,5,data,data,98,data
data,data,4,data,data,8.7,data
data,data,5,data,data,9.7,data
data,data,12.5,data,data,198.7,data
我對編碼真的很陌生,但是我的嘗試如下:導入csv導入datetime導入來自集合的副本import defaultdict
class_col = 2
data_col = 5
with open('minitest.csv', 'r') as f:
data = [line.strip().split(',') for line in f]
for row in data:
class_col*data_col
with open('minitest_edit.csv', 'w') as nf:
nf.write('\n'.join(','.join(row) for row in data))
print "done"
我沒有出現任何錯誤,有什么建議嗎? 謝謝操作系統”
使用csv.reader
和csv.writer
:
import csv
with open('minitest.csv', 'rb') as f:
reader = csv.reader(f)
data = [next(reader)] # title row
for row in reader:
data.append(row + [float(row[2]) * float(row[5])])
with open('minitest.csv', 'wb') as nf:
writer = csv.writer(nf)
writer.writerows(data)
產生:
TITLE,TITLE,T,T,T,T
data,data,5,data,data,98.7,data,493.5
data,data,2,data,data,97,data,194.0
data,data,5,data,data,98,data,490.0
data,data,4,data,data,8.7,data,34.8
data,data,5,data,data,9.7,data,48.5
data,data,12.5,data,data,198.7,data,2483.75
您希望以下內容將列相乘並將它們附加到原始列中:
new_data = []
for row in data:
new_data.append(row + [float(row[class_col]) * float(row[data_col])])
這是一種更有效地執行此操作的方法,即通過不讀取內存中的數據,這將與較大的數據集有關:
import csv
import tempfile
import shutil
input_file = 'minitest.csv'
with open(input_file, 'rb') as f, \
tempfile.NamedTemporaryFile(delete=False) as out_f:
# in order to be able to not have to read everything in memory, we have to
# write every processed row to disk immediatley; for that, we need a temporary
# file because we can't read and write a single file at the same time:
reader = csv.reader(f)
writer = csv.writer(out_f)
# header row
writer.writerow(next(reader))
# note that this uses a generator not a list, so that writerows will lazily
# evaluate each row as it writes them to disk
writer.writerows(row + [float(row[2]) * float(row[5])] for row in reader)
# one everything's done, overwrite the original file with the new contents.
shutil.move(out_f.name, input_file)
PS:如果您不寫回同一文件,實際上實際上會更簡單-在處理代碼完成之后,您始終可以手動進行移動,以使處理代碼更簡單。
如果您幸運並在LUNIX上編程,可以使用awk:
awk -F "\"*,\"*" '{print $0 "," $3*$6 }' test.csv > result.csv
您可以使用Python http://docs.python.org/2/library/subprocess.html進行調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.