如何在读取 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?