如何在读取 CSV 文件时将字符串值转换为整数值?

Posted

技术标签:

【中文标题】如何在读取 CSV 文件时将字符串值转换为整数值?【英文标题】:How to convert string values to integer values while reading a CSV file? 【发布时间】:2016-02-06 11:28:57 【问题描述】:

打开 CSV 文件时,整数列被转换为字符串值(“1”、“23”等)。循环将这些转换回整数的最佳方法是什么?

import csv

with open('C:/Python27/testweight.csv', 'rb') as f:
    reader = csv.reader(f)
    rows = [row for row in reader if row[1] > 's']

for row in rows:
    print row

CSV 文件如下:

Account Value
ABC      6
DEF      3
GHI      4
JKL      7

【问题讨论】:

一个小问题:CSV 文件是文本文件,因此认为整数被转换为字符串是错误的。它们已经是字符串。您遇到的问题是您希望将它们转换为整数。 @StevenRumbalski 除了,CSV 格式不包含应该被视为字符串的数值 数字(通过使用单引号前缀,或将数字括在双引号)? 我不确定 unquoted 值是否被视为 numeric。值是文本,您需要引用它以避免错误解释位于值内的分隔符/换行符 【参考方案1】:

我认为这是你想要的:

import csv

with open('C:/Python27/testweight.csv', 'r', newline='') as f:
    reader = csv.reader(f, delimiter='\t')
    header = next(reader)
    rows = [header] + [[row[0], int(row[1])] for row in reader if row]

for row in rows:
    print(row)

输出:

['Account', 'Value']
['ABC', 6]
['DEF', 3]
['GHI', 4]
['JKL', 7]

【讨论】:

谢谢,但这给了我“IndexError: list index is out of range” 我是否必须指定范围,如果需要,在哪里? 听起来真实 .CSV 文件中的某些行不包含两个值。如果是这种情况,您可以通过将列表理解的末尾更改为 ...for row in reader if len(row) > 1] 来跳过它们。【参考方案2】:

如果 CSV 有标题,我建议使用 csv.DictReader。有了这个你可以这样做:

 with open('C:/Python27/testweight.csv', 'rb') as f:
    reader = csv.DictReader(f)
    for row in reader:
        integer = int(row['Name of Column'])

【讨论】:

谢谢,但我得到一个 KeyError: 1 这意味着 csv 中存在错误,您介意将 csv 的一小部分与标题一起发布吗? 我把它放在原始问题中 您要获取的列需要输入为字符串,因此:integer = int(row['1'])。不要忘记引号!!!【参考方案3】:

您可以按如下方式遍历所有行:

import csv

with open('testweight.csv', newline='') as f:
    rows = list(csv.reader(f))      # Read all rows into a list

for row in rows[1:]:    # Skip the header row and convert first values to integers
    row[1] = int(row[1])

print(rows)

这将显示:

[['Account', 'Value'], ['ABC', 6], ['DEF', 3], ['GHI', 4], ['JKL', 7]]

注意:您的代码正在检查> 's'。这将导致您没有得到任何行,因为数字将被视为小于s。如果您仍然使用 Python 2.x,请将 newline='' 更改为 'rb'

【讨论】:

以上是关于如何在读取 CSV 文件时将字符串值转换为整数值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 pandas.read_csv 读取 csv 文件时将 pandas.dataframe 中的元素转换为 np.float?

如何在使用 pandas.read_csv 读取 csv 文件时将 pandas.dataframe 中的元素转换为 np.float?

将布尔值转换为整数值php

将十六进制颜色值 (#ffffff) 转换为整数值

如何在 SQL 中将指数和系数转换为整数值

使用“加载文件数据”时将真假字符串转换为布尔值