pythoncsv数据类型_用Python处理CSV输入中的多种数据类型时遇到的问题

我有一个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])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值