簡體   English   中英

Python:如何將 CSV 中除一列之外的所有列轉換為整數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM