![](/img/trans.png)
[英]How do I fix this program that adds up all the integers in a list except the one that equals said sum?
[英]Python: how do I convert all columns except one in a CSV to integers
我有具有不同列數的 CSV 文件。 第一列始終是字符串,其他列始終是整數。
第一列始終是“名稱”,但其他列可以有不同的名稱 - 所以我不能硬編碼除“名稱”之外的任何列的鍵值。
理想情況下,會有某種語法/函數允許我!"name" to int
,然后我可以將一些東西放在一起。
這就是我現在所擁有的,它不會轉換為 int,它只是構建一個字典。
import csv
persons = []
database_csv = sys.argv[1]
with open(database_csv, "r") as database:
read_csv = csv.DictReader(database)
for row in read_csv:
persons.append(row)
我找到了將所有轉換為 int、將鍵(例如“name”)轉換為 int 的解決方案,但我找不到任何可以讓我將除“name”之外的所有內容轉換為 int 的東西。
請注意,我使用的是字典,而不是列表。 列表的解決方案在下游並不直接有用。 如果沒有可行的解決方案可以在不訴諸 pandas 的情況下選擇性地更改字典中的數據類型,那么我將需要重新考慮字典方法並弄清楚如何使代碼的 rest 工作。
我不知道您是否聽說過 pandas。 但是你可以使用以下
import pandas as pd
df = pd.read_csv(database_csv)
persons = df.values.tolist()
希望這可以幫助,
import csv
persons = []
with open("database.csv", "r") as database:
read_csv = csv.DictReader(database)
for row in read_csv:
# Type decl does nothing.
row: dict
print(row.keys())
for key in row.keys():
print(row[key])
這行得通嗎?
import csv
with open(database_csv) as fp:
csvreader = csv.reader(fp)
headers = next(csvreader)
name_idx = headers.index('name')
rows = [row for row in csvreader]
rows = [int(value) for value in row for row in rows if row.index(value) != name_idx]
要轉換字典中的每個值,除了一個特定的鍵,你可以做
converted = {k: (v if k == 'name' else int(v)) for k, v in row.items()}
讓我們把它分開:
{k: v for k, v in... }
— 這是一個dict 理解,它讓我們可以迭代某些東西並從結果中構建一個 dict。 在這種情況下,我們期望 ... 是對的序列,我們使用k, v
構造將它們分成兩個變量。v if k=='name' else int(v)
— 我們使用條件表達式來決定,對於每個項目,如何處理它 — 保持原樣或調用int()
。row.items())
——這給了我們row
字典的每個元素作為(鍵,值)對,這就是我們在第一點所說的我們所期望的。(如果你有幾個想要保持不變的鍵,你可以這樣做
excluded = set(['name', 'address', 'preferred_colour'])
然后if k in excluded_set
而不是if k=='name'
) )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.