繁体   English   中英

如何将字典列表值转换为整数?

[英]How do I convert dictionary list values to integers?

我正在使用Python 3.5。 我上传了一个CSV文件,并将其制成字典。 但是,每个键的多个值列表是一个字符串,而不是整数。 如何将每个键的值转换为整数?

此外,是否存在将来CSV导入的方法来自动将字典值列表转换为整数?

到目前为止,这就是我所拥有的:

import csv
reader = csv.reader(open('filename.csv'))
dictname = {}
for row in reader:
    key = row[0]
    if key in dictname:
        pass
    dictname[key] = row[1:]

print dictname

如果row是包含以字符串格式表示的整数的列表:

dictname[key] = [int(elt) for elt in row[1:] if elt.isdigit()]

应该可以

您可以使用熊猫并指定转换器功能。 实际上,您甚至不需要这样做,因为它可以智能地解析CSV文件。

import pandas as pd

df = pd.read_csv('filename.csv')

如果需要转换器功能:

df = pd.read_csv('filename.csv',converters={'yourintegercolumn':int})

我使用一个函数来首先检查该值是否为字符串/ Unicode。 如果是这样,它将尝试将其转换为浮点数,例如“ 1,234.45”-> 1234.45。 如果失败或该值不是字符串/浮点型,则该函数将其保持不变。

然后在列表推导中使用此函数填充字典。

请注意, if key in dictname: pass块中的if key in dictname: pass不会执行任何操作。 如果您的数据中有重复的键,则有以下三种选择:

1)用具有相同键值的新行覆盖现有键的数据(这是当前正在发生的情况)。

2)仅使用键行的第一个匹配项。 在这种情况下,请更改pass continue

3)尝试汇总数据。 这更加复杂,超出了您原始问题的范围,因此我将留给您找出或发布涵盖此问题的新问题。

def convert_to_numeric(value):
    if isinstance(i, (str, unicode)):
        try:
            result = float(value)
        except:
            pass  # Returns result on next line.
    return result

for row in reader:
    key = row[0]
    if key in dictname:
        pass  # This doesn't do anything. Use `continue` to avoid overwriting.
    dictname[key] = [convert_to_numeric(i) for i in row[1:]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM