我有一个csv转储,我试图导入它来运行其中的指标分析,樱桃选择某些指标来看待。有些单元是字符串,有些是数字。但是,我无法让csv.reader正确处理这些数字。片段:
with open('t0.csv', 'rU') as file:
reader = csv.reader(file, delimiter=",", quotechar='|')
reader.next() # Burn header row
for row in reader:
if row[0] != "": # Burn footer row
t0_company.extend([unicode(row[3], 'utf-8')])
t0_revenue.extend([row[9]])
t0_clicks.extend([row[10]])
t0_pageviews.extend([row[11]])
t0_avg_cpc.extend([row[13]])
t0_monthly_budget.extend([row[16]])我在t1输入另一个格式相同的文件。然后我为每个度量创建两个字典(一个在t0,另一个在t1),形式为metric_dict = {'company':'metric'},如下所示:
metric = dict(zip(company, metric))然而,对这些指标运行简单的数学计算却存在问题:
percent_change = float(t1_metric_dict[company]) / float(t0_metric_dict[company]) - 1返回如下错误:
Traceback (most recent call last):
File "report.py", line 104, in
start_revenue_dict[company], end_revenue_dict[company], float(end_revenue_dict[company]) / float(start_revenue_dict[company]) - 1,
ValueError: could not convert string to float: "6.18"似乎每次都选择相同的号码来抱怨。
我很确定错误发生在部门,因为如果我交换一个占位符字符串作为第三个元素,一切正常。
我也尝试使用quoting = csv.QUOTE_NONNUMERIC,将第一个片段中的第二行更改为
reader = csv.reader(file, delimiter=",", quotechar='|', quoting=csv.QUOTE_NONNUMERIC)哪个让我这个错误:
Traceback (most recent call last):
File "report.py", line 30, in
reader.next()
ValueError: could not convert string to float: "Type"我试图确保csv没有任何奇怪的单元格类型(一切都是文本),即使我怀疑它很重要。我会很感激任何帮助。
------更新------
我的输入文件中的一列包含电子邮件地址。作为一个实验,我从输入文档中删除了所有@,这些输入文档改变了我所得到的错误信息:
Traceback (most recent call last):
File "report.py", line 129, in
unicode_row = [str(item).encode('utf8') for item in utf8_row]
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 2: ordinal not in range(128)它引用的代码是csv out部分:
writer = csv.writer(open('output.csv', 'wb'), delimiter=",", quotechar='|')
for utf8_row in report:
unicode_row = [str(item).encode('utf8') for item in utf8_row]
writer.writerow(unicode_row)-----更新#2 -----
根据要求,这是导致问题的完整代码片段:
for company in companies_in_both:
report.append([company,
start_revenue_dict[company], end_revenue_dict[company], float(end_revenue_dict[company]) / float(start_revenue_dict[company]) - 1,
start_clicks_dict[company], end_clicks_dict[company], float(end_clicks_dict[company]) / float(start_clicks_dict[company]) - 1,
start_pageviews_dict[company], end_pageviews_dict[company], float(end_pageviews_dict[company]) / float(start_pageviews_dict[company]) - 1,
start_avg_cpc_dict[company], end_avg_cpc_dict[company], float(end_avg_cpc_dict[company]) / float(start_avg_cpc_dict[company]) - 1,
start_monthly_budget_dict[company], end_monthly_budget_dict[company], float(end_monthly_budget_dict[company]) / float(start_monthly_budget_dict[company]) - 1])