【问题标题】:Formatting values using header indexing with csv使用带有 csv 的标头索引来格式化值
【发布时间】:2016-06-21 17:47:27
【问题描述】:

我有一个 .csv 文件,我需要让它看起来像一个专门格式化的字典,但我无法绕开必要的循环来按照我需要的方式执行此操作。例如,这三行(row[0] 是带有我的标签的标题)目前看起来像:

0 outlook,temperature,humidity,windy,result
1 overcast,hot,high,FALSE,yes
2 overcast,cool,normal,TRUE,yes
...

应该是这样的:

 {"outlook":"overcast", "temperature":"hot", "humidity":"high","windy":"FALSE","result":"yes"},
 {"outlook":"overcast", "temperature":"cool", "humidity":"normal","windy":"TRUE","result":"yes"},
 ...

一旦它们经过处理和清理。我已经很接近了,但使用字典不太正确。我一直在搞乱熊猫和导入 csv,我开始忘记在 Py3 中执行此操作的最佳方法是什么。

感谢您的帮助。非常感谢。

【问题讨论】:

    标签: python csv formatting data-cleaning


    【解决方案1】:

    你可以使用DictReader:

    创建一个像普通阅读器一样操作的对象,但将读取的信息映射到一个字典,其键由可选的给定 字段名参数。 fieldnames 参数是一个序列,其 元素按顺序与输入数据的字段相关联。 这些元素成为结果字典的键。如果 fieldnames 参数被省略,第一行的值 csvfile 将用作字段名。

    所以一个示例代码是:

    import csv
    with open('temperature.csv') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            print(row)
            ...
    

    会打印出来

    {"outlook":"overcast", "temperature":"hot", "humidity":"high","windy":"FALSE","result":"yes"},
    ...
    

    【讨论】:

    • 这是完美的,我一直在寻找的东西。当然,我也跑过它一百万次,但它从来没有点击过。知道为什么它将最后一行显示为字典中的第一个属性,如下所示:{'result': 'yes', 'outlook': 'sunny', '湿度': 'normal', 'temperature': 'mild' , '有风': 'TRUE'} ?
    • 那是因为dicts没有排序,不能保证key的顺序。不过不会影响你的使用。您可以将结果转换为OrderedDict,然后进行排序。
    猜你喜欢
    • 1970-01-01
    • 2017-12-08
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    相关资源
    最近更新 更多