【问题标题】:Writing CSV file using dictionary inside dictionary [closed]使用字典内的字典编写 CSV 文件 [关闭]
【发布时间】:2018-10-31 01:58:48
【问题描述】:

我在字典中有一个字典,并想使用第一个字典中的字典创建一个新的 CSV 文件。

我还想要以下标题:Original_ID、Dist、Bearing、Latitude 和 Longitude。

我的字典里面的字典是这样的,(E060是第一个字典的键)

{'E060': {'ORIGINAL_ID': '001', 'DIST': '400.3049', 'BEARING': 
'23.0495', 'LATITUDE': 19.3459, 'LONGITUDE': 130.3094} , {'E061': 
{'ORIGINAL_ID': '002', 'DIST': '429.5968', 'BEARING': 
'22.0284', 'LATITUDE': 13.1948, 'LONGITUDE': 139.3492} , etc , etc 100s 
more}

最终目标是使用这些数据创建一个新的 CSV 文件,如下所示:

ORIGINAL_ID   DIST     BEARING   LATITUDE  LONGITUDE
  001        400.3049  23.0495   19.3459   130.3094
  002          etc .    etc .     etc .     etc 

或者如果更简单/不太复杂,我希望将“E060”作为另一个值包含在另一列下,即

   First_ID  ORIGINAL_ID     DIST     BEARING   LATITUDE  LONGITUDE
    E060        001        400.3049  23.0495   19.3459   130.3094
    E061        002          etc .    etc .     etc .     etc 

编辑:请不要使用熊猫 - 它超出了我的领域 atm。

【问题讨论】:

    标签: python csv dictionary writing


    【解决方案1】:

    非熊猫版本:

    import csv
    
    D = {'E060': {'ORIGINAL_ID': '001', 'DIST': '400.3049', 'BEARING': '23.0495',
                  'LATITUDE': 19.3459, 'LONGITUDE': 130.3094},
         'E061': {'ORIGINAL_ID': '002', 'DIST': '429.5968', 'BEARING': '22.0284',
                  'LATITUDE': 13.1948, 'LONGITUDE': 139.3492}}
    
    # open the output file in binary mode with no newline translation.
    with open('out.csv','w',newline='') as file:
    
        # Create a dictionary-per-row-based CSV writer, with columns listed.
        writer = csv.DictWriter(file,fieldnames='First_ID ORIGINAL_ID DIST BEARING LATITUDE LONGITUDE'.split())
    
        writer.writeheader()  # Add a header line to the CSV.
    
        # Iterate over the key/value pairs of the outer dictionary.
        for key,dict_value in D.items():
    
            # To keep from modifying the original value, make a copy.
            row = dict_value.copy()
    
            # Add the key value (e.g. E060) in the First_ID column.
            row['First_ID'] = key
    
            # Commit the inner dictionary values to a row of the CSV.
            writer.writerow(row)
    

    out.csv:

    First_ID,ORIGINAL_ID,DIST,BEARING,LATITUDE,LONGITUDE
    E060,001,400.3049,23.0495,19.3459,130.3094
    E061,002,429.5968,22.0284,13.1948,139.3492
    

    【讨论】:

    • 谢谢,澄清一下,代码:w = csv.DictWriter(f,fieldnames='First_ID ORIGINAL_ID DIST BEARING LATITUDE LONGITUDE'.split()) 本质上是做什么的?
    • DictWriter 将字典写入 CSV。由于字典是无序的,fieldnames 列出了字典的键被写成一行的顺序。 .split() 创建一个在空格处中断的字符串列表。打字比['aaa','bbb','ccc',...]快。
    • 再次干杯,最后一个问题;这段代码有什么作用? for k,v in D.items(): row = v.copy() row['First_ID'] = k w.writerow(row) 再次感谢你,你帮了大忙。
    • @James 评论了代码。记住,谢谢 == 点赞 :^)
    【解决方案2】:

    使用pandas

    df = pd.DataFrame(d).T
    
    >>>
              BEARING      DIST LATITUDE LONGITUDE ORIGINAL_ID
    E060  23.0495  400.3049  19.3459   130.309         001
    E061  22.0284  429.5968  13.1948   139.349         002
    
    df.to_csv('your.csv')
    

    如果要将索引重命名为列,请执行以下操作:

    df = df.rename_axis('FIRST_ID').reset_index()
    
    >>>
      FIRST_ID  BEARING      DIST LATITUDE LONGITUDE ORIGINAL_ID
    0     E060  23.0495  400.3049  19.3459   130.309         001
    1     E061  22.0284  429.5968  13.1948   139.349         002
    

    【讨论】:

      【解决方案3】:

      首先将其更改为 pandas 数据框,然后转换为 csv。 在 'E061' 之前有一些额外的括号,比如括号,所以检查一下。

      import pandas as pd
      df=pd.DataFrame(a)
      df=df.T
      
      df.to_csv('fineName.csv')
      

      【讨论】:

        猜你喜欢
        • 2016-08-25
        • 2019-09-15
        • 2020-01-25
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多