我有一個函式(main),它從 csv 檔案中獲取資料并將其轉換為字典,其鍵是第一列中的條目,它們的值是該行中所有其他條目的串列(例如:一行是:2020-12-20,0,0,0,0,206,所以關鍵是2020-12-20,其余條目是串列中的字串:)['0', '0', '0', '0', '206']:
def main():
import csv
# doses_data_mar_20.csv
dict_doses_by_date = {}
filename_input = str(input("Please enter a .csv file to read: "))
with open(filename_input, "r") as inp, open('doses.csv', 'w') as out:
header = inp.readline()
reader = csv.reader(inp, delimiter=",", quotechar='"')
for line in reader:
dict_doses_by_date[line[0]] = line[1:6]
return dict_doses_by_date
def count_doses_by_date(dict_dose_by_date):
現在我需要定義一個新函式count_doses_by_date,它將每個字串串列作為輸入,并將這些字串串列中的每一個轉換為整數串列,并將所有整數相加以獲得它們的總數。然后將其輸出到另一個 csv 檔案中。
我試過這樣做:
def count_doses_by_date(dict_dose_by_date):
import csv
# doses_data_mar_20.csv
dict_doses_by_date = {}
filename_input = str(input("Please enter a .csv file to read: "))
with open(filename_input, "r") as inp, open('doses.csv', 'w') as out:
header = inp.readline()
reader = csv.reader(inp, delimiter=",", quotechar='"')
for line in reader:
dict_doses_by_date[line[0]] = line[1:6]
for k in dict_doses_by_date:
list_integers = [int(x) for x in dict_doses_by_date[k]]
sum_integers = sum(list_integers)
print_value = "{}, {} \n".format(k, sum_integers)
return out.write(print_value)
但我收到錯誤,因為某些串列包含像 '1,800' 這樣的字串,其中包含阻止將其轉換為整數的逗號。我不知道如何在不破壞分隔 csv 值的逗號的情況下擺脫數千個逗號。
我被卡住了..這將如何完成?
uj5u.com熱心網友回復:
您應該使用 pandas 庫。您可以使用pd.read_csv直接從檔案中獲取資料框,并且可以將第一列設定為索引列。您可以使用df.applymap(lamba x : int(x.replace(',',''))去掉逗號并轉換為 int,然后執行df.sum(axis = 1)逐行求和。
uj5u.com熱心網友回復:
你會試試這個嗎?用于string.isdigit()判斷是否為數字
line = ['2020-12-20', '0', '0', '0', '0', '206']
filtered_line = [int(e) if e.isdigit() else '' for e in line[1:6]]
print([x for x in filtered_line if x != ''])
輸出
[0, 0, 0, 0, 206]
編輯:我錯過了關于千位分隔符的部分。在您的用例中,代碼可能是這樣的:
dict_doses_by_date = {}
reader = [['2020-12-20', '0', '0', '0', '10', '206'], ['2020-12-21', '0', '0', '0', '20', '316'], ['2020-12-22', '0', '0', '0', '30', '1,426']]
for line in reader:
list_integers = [int(x.replace(',', '')) for x in line[1:6]]
dict_doses_by_date[line[0]] = list_integers
print_value = "{}, {} \n".format(line[0], sum(list_integers))
print(print_value)
print(dict_doses_by_date)
輸出
2020-12-20, 216
2020-12-21, 336
2020-12-22, 1456
{'2020-12-20': [0, 0, 0, 10, 206], '2020-12-21': [0, 0, 0, 20, 316], '2020-12-22': [0, 0, 0, 30, 1426]}
uj5u.com熱心網友回復:
因此,如果您的字串類似于“1234”,您可以這樣做
int(number, base=base)
你會得到一個整數。例如:
print(int("1234"))
將列印 1234 號碼。
請在此處查看其余檔案:https ://docs.python.org/3/library/functions.html#int
然后要真正實作您想要的,您可以按照其他評論的建議或您想要的任何方式進行操作,只需遍歷元素串列并繼續添加它們 (a = int("1234")) 然后回傳總數并寫入它到檔案中。
當然,如果您的字串有意外的符號,例如“千逗號”,那么您需要在呼叫之前通過使用或通過其他方式int()洗掉字符來規范化字串。replace()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/489594.html
標籤:Python python-3.x 列表 CSV
