当前位置: 首页 > 知识库问答 >
问题:

Python转换str到int[重复]

万英武
2023-03-14

我的程序需要一个函数,该函数从csv文件(“all.csv”)读取数据,并在特定日期提取与某个州有关的所有数据(提取其中包含“state name”和“date”的每一行),然后将提取的数据写入另一个名为:state.csv的csv文件

当数据被写入时,每个州在特定日期的病例数和死亡数被统计和合计。然后,该函数以元组形式返回总病例和死亡数(病例,死亡)

例如州=‘加利福尼亚’日期=‘2020-03-09’

我得到的错误是“0.0”和“死亡”无法转换为整数。第一行是标题,我得到的错误是“死亡无法转换为整数”。因此我有两个问题:

  1. 我如何跳过标题'死亡'(最后一列)并移动到其余的数据?
  2. 如何将其余数据(十进制格式的字符串)转换为int?

注意:当我将链接数据保存到'all.csv'时,死亡列转换为十进制格式(0.0)。

all.csv的内容如下:https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv

这是我写的程序:

import csv

input_file = 'all.csv'
state = input()
date = input() # date format m/d/yyyy
output_file = state + '.csv'


def number_of_cases_deaths_by_date(input_file, output_file, state, date):
    with open(input_file, 'r') as infile: #open both files
        contents = infile.readlines()
        
        with open(output_file, 'w') as outfile:
            writer = csv.writer(outfile)
        
            for row in range(len(contents)): # save data in list
                contents[row] = contents[row].split(',') #split elements
                contents[row][6] = contents[row][6].strip('\n') #strip \n from last column
                
            print(contents[3:5])
            cases = 0
            deaths = 0
            
            for row in range(len(contents)):
                if contents[row][3] == state and contents[row][1] == date: # if row has desired state, write it to new file
                    writer.writerow((contents[row]))
                    int_cases = int(contents[row][5])
                    cases = cases + int_cases
                    int_deaths = int(contents[row][6])
                    deaths += deaths + int_deaths
            return (cases, deaths)
                    
                
data = number_of_cases_deaths_by_date(input_file, output_file, state, date)
print(data)

共有1个答案

秦俊友
2023-03-14

没有说明为什么all.csv数据与您的链接不同,但是清理代码并使用原始下载数据这很简单:

import csv

def number_of_cases_deaths_by_date(input_file, output_file, desired_state, desired_date):

    total_cases = 0
    total_deaths = 0

    with open(input_file, encoding='utf8', newline='') as infile, \
         open(output_file, 'w', encoding='utf8', newline='') as outfile:

        reader = csv.reader(infile)
        writer = csv.writer(outfile)
        header = next(reader)
        
        for date,county,state,fips,cases,deaths in reader:
            if state == desired_state and date == desired_date:
                writer.writerow([date,county,state,fips,cases,deaths])
                total_cases += int(cases)
                total_deaths += int(deaths)

    return total_cases, total_deaths
                
input_file = 'us-counties.csv'
state = 'Oregon'
date = '2021-11-05'
output_file = f'{state}.csv'

data = number_of_cases_deaths_by_date(input_file, output_file, state, date)
print(data)

输出:

(372137, 4562)

Oregon.csv:

2021-11-05,Baker,Oregon,41001,2079,30
2021-11-05,Benton,Oregon,41003,5779,31
2021-11-05,Clackamas,Oregon,41005,31022,328
2021-11-05,Clatsop,Oregon,41007,2491,29
2021-11-05,Columbia,Oregon,41009,4024,47
2021-11-05,Coos,Oregon,41011,5294,98
2021-11-05,Crook,Oregon,41013,3114,53
2021-11-05,Curry,Oregon,41015,1846,27
2021-11-05,Deschutes,Oregon,41017,21677,138
2021-11-05,Douglas,Oregon,41019,12622,263
2021-11-05,Gilliam,Oregon,41021,168,4
2021-11-05,Grant,Oregon,41023,1039,14
2021-11-05,Harney,Oregon,41025,1172,30
2021-11-05,Hood River,Oregon,41027,2007,37
2021-11-05,Jackson,Oregon,41029,23807,330
2021-11-05,Jefferson,Oregon,41031,3972,60
2021-11-05,Josephine,Oregon,41033,9712,206
2021-11-05,Klamath,Oregon,41035,8552,127
2021-11-05,Lake,Oregon,41037,987,15
2021-11-05,Lane,Oregon,41039,28799,323
2021-11-05,Lincoln,Oregon,41041,3352,45
2021-11-05,Linn,Oregon,41043,13711,141
2021-11-05,Malheur,Oregon,41045,5814,82
2021-11-05,Marion,Oregon,41047,38270,472
2021-11-05,Morrow,Oregon,41049,1897,24
2021-11-05,Multnomah,Oregon,41051,57661,746
2021-11-05,Polk,Oregon,41053,7737,87
2021-11-05,Sherman,Oregon,41055,175,3
2021-11-05,Tillamook,Oregon,41057,2045,38
2021-11-05,Umatilla,Oregon,41059,14820,164
2021-11-05,Union,Oregon,41061,3294,50
2021-11-05,Wallowa,Oregon,41063,729,12
2021-11-05,Wasco,Oregon,41065,3033,41
2021-11-05,Washington,Oregon,41067,40121,342
2021-11-05,Wheeler,Oregon,41069,108,1
2021-11-05,Yamhill,Oregon,41071,9207,124
 类似资料:
  • 本文向大家介绍python中int与str互转方法,包括了python中int与str互转方法的使用技巧和注意事项,需要的朋友参考一下 最近学习python中的数据类型时,难免联想到java中的基本型数据类型与引用型数据类型。于是对python中的int与str做了简单赋值输出,出现了意料之外的事情。 使用int(object)后,a与b的地址是一样的。 补充:python在给变量赋值时默认格式为

  • 假设我有一个像这样的数据框... 我想把这个列转换成int类型。我可以很容易地做到这一点与。。。 但是如果我的数据帧看起来像这样。。。 我尝试将其从转换为然后我得到了这个错误 为什么这样不行?我该如何正确地将其转换为int?

  • VSCode 对两个类 self.save_data.prop 的类型推断结果: int* | str* 和 int | str 有什么区别,多出来的星号是什么意思?

  • 问题内容: 我正在尝试编写文本游戏,但在定义的函数中遇到了错误,该错误使你基本上无法在制作角色后花费技能点。最初,错误表明我正在尝试从代码的这一部分的整数中减去一个字符串。显然这是错误的,所以我用… 修复了它,但是现在我遇到了一个以前从未见过的错误(新程序员),并且我对确切要告诉我的内容以及如何解决它感到困惑。 这是我的部分功能不起作用的代码: 这是我在shell中获得这部分代码时遇到的错误: 有

  • 问题内容: 我正在尝试测试某个数字的十进制表示形式是否至少包含两次数字9,所以我决定执行以下操作: 但是Python始终会以“ TypeError:无法将’int’对象隐式转换为str”进行响应。 我在这里做错了什么?实际上,是否存在一种更聪明的方法来检测整数的十进制表示形式中包含某个数字的频率? 问题答案: 您的问题在这里: 您需要使字符串文字,而不是整数: 为了更好地计算字符串中出现的次数,请

  • 我有这个程序,它几乎是一个计算器,但有一个移动的JLabel,每次你点击标签时都应该改变颜色,但我在代码的最底部有3个错误,我已经用注释标记了。所有三个都是:错误:不兼容类型:可能从长整型转换为整数