【问题标题】:set index and Read Multi-index on columns from csv在 csv 的列上设置索引和读取多索引
【发布时间】:2018-08-14 19:18:22
【问题描述】:

我有一个看起来像这样的 .csv:

SiteCode,('Max_Area',1), ('Max_Vol',1)
0003L,3037.1875,13390.319488525391
0009L,7719.25,476.31626510620117

第一列是所需的索引,以下元组是我所需的列名。当我阅读 csv 时:

df = pd.read_csv("file.csv",index_col=0)

我得到一个如下所示的数据框:

          (Max_Area            1)   (Max_Vol         1)
SiteCode                                                                
0003L     3037.1875  13390.319489  NaN  NaN       
0009L     7719.2500    476.316265  NaN  NaN

我想要一个看起来像这样的数据框:

SiteCode  (Max_Area,1)   (Max_Vol,1)                       
0003L     3037.1875  13390.319489    
0009L     7719.2500    476.316265  

是否可以读取以逗号分隔的元组作为标题的 csv?

【问题讨论】:

    标签: python pandas csv multi-index


    【解决方案1】:

    您可以显式传入要使用的列名并跳过标题行:

    df = pd.read_csv("file.csv", 
                     names=['SiteCode', '(Max_Area, 1)', '(Max_Vol, 1)'],
                     skiprows=1, 
                     index_col=0)
    
    df
    
              (Max_Area,1)   (Max_Vol,1)
    SiteCode                         
    0003L     3037.1875      13390.319489    
    0009L     7719.2500        476.316265  
    

    【讨论】:

      【解决方案2】:

      您可以读取第一行,提取列名并将此信息提供给 csv 阅读器:

      import pandas as pd
      import re
      
      with open("test.txt", "r") as f:
          header = f.readline()[:-1]
      
      pattern = re.compile(r"(?:[^,(]|\([^)]*\))+")
      df = pd.read_csv("test.txt", names = pattern.findall(header), skiprows = 1)
      #output
        SiteCode  ('Max_Area',1)  ('Max_Vol',1)
      0    0003L       3037.1875   13390.319489
      1    0009L       7719.2500     476.316265
      

      【讨论】:

        猜你喜欢
        • 2014-02-14
        • 1970-01-01
        • 2021-05-11
        • 2021-07-05
        • 2020-11-12
        • 2015-07-31
        • 2013-12-05
        • 2021-10-10
        • 2017-05-03
        相关资源
        最近更新 更多