将字典值写入单独的CSV列并创建标题
我创建了一个字典,使用日期作为键,并为每个日期添加了多个值。这个字典是通过读取一个原始的csv文件来填充的,这样我就可以计算每个日期的总数。
我的代码:
import csv
##Opens the csv file to be read
tradedata=open("test.csv","r")
##Reads the csv file
tradedatareader = csv.reader(tradedata,delimiter=',',quotechar='"')
##create dictionary
my_dict = {}
for row in tradedatareader:
Date = row[1][0:8]
volume = int(row[4])
price = float(row[5])
Transtype=row[6]
##Find SEC_Fee
if Transtype !="BUY":
ttype =1
else:
ttype=0
secfee=(ttype*volume*price*.0000221)
##Finds Notional Value
notional_val = (volume*price)
##Finds Clearing Fees
cl_fee = (volume*.0005)
if cl_fee < .05:
clearing_fee = 0.05
else:
clearing_fee = (volume*.0005)
##Finds Totals per Date
my_dict[Date] = my_dict.setdefault(Date, [0,0,0,0,0])
my_dict[Date][0] = my_dict[Date][0] + volume
my_dict[Date][1] = my_dict[Date][1] + notional_val
my_dict[Date][2] = my_dict[Date][2] + secfee
my_dict[Date][3] = my_dict[Date][3] + clearing_fee
my_dict[Date][4] = my_dict[Date][4] + secfee + clearing_fee
## Writes totals to CSV
with open('mycsvfile.csv','w') as f:
w = csv.writer(f, delimiter = ',')
w.writerows(my_dict.items())
现在,这段代码会把键写在A列,把值写在B列,并且每行之间会留一行空白。
我希望每个值都能写在自己的列里,并且每一列都有一个像这样的标题:
DATE Volume Notional Value SEC FEES Clearing Fees Total Fees
20140612 2751 157750.56 3.4132565999 1.4500000 4.8632566
20140612 5148 270200.02 5.831338266 2.692499999 8.523838265999998
2 个回答
0
items()这个函数会返回一个包含键和值的列表,但这并不是你想要写入文件的内容。下面的代码可以正常工作:
with open('mycsvfile.csv', 'w') as f:
w = csv.writer(f)
w.writerow(['DATE', 'Volume', 'Notional Value', 'SEC FEES', 'Clearing Fees', 'Total Fees'])
for date in sorted(my_dict):
w.writerow([date] + my_dict[date])
如果你不想让输出结果按顺序排列,只需去掉sorted()这个函数就可以了。
3
我建议你使用Pandas这个工具。
如果你把数据准备成一个字典的列表,每个字典代表一行数据,而字典里的键就是列名,值就是这一行的数据,那么当你执行:
import pandas as pd
pd.DataFrame(list_of_dictionaries).to_csv('put_your_filename_here.csv')
时,你的数据就会被正确格式化。