【问题标题】:Load CSV to Pandas MultiIndex DataFrame将 CSV 加载到 Pandas MultiIndex DataFrame
【发布时间】:2013-10-06 20:54:50
【问题描述】:

我有一个 719mb 的 CSV 文件,看起来像:

from, to, dep, freq, arr, code, mode   (header row)
RGBOXFD,RGBPADTON,127,0,27,99999,2
RGBOXFD,RGBPADTON,127,0,33,99999,2
RGBOXFD,RGBRDLEY,127,0,1425,99999,2
RGBOXFD,RGBCHOLSEY,127,0,52,99999,2
RGBOXFD,RGBMDNHEAD,127,0,91,99999,2
RGBDIDCOTP,RGBPADTON,127,0,46,99999,2
RGBDIDCOTP,RGBPADTON,127,0,3,99999,2
RGBDIDCOTP,RGBCHOLSEY,127,0,61,99999,2
RGBDIDCOTP,RGBRDLEY,127,0,1430,99999,2
RGBDIDCOTP,RGBPADTON,127,0,115,99999,2
and so on... 

我想加载到 pandas DataFrame。现在我知道 csv 方法有负载:

 r = pd.DataFrame.from_csv('test_data2.csv')

但我特别想将它作为“MultiIndex”数据帧加载,其中 from 和 to 是索引:

所以结束了:

                   dep, freq, arr, code, mode
RGBOXFD RGBPADTON  127     0   27  99999    2
        RGBRDLEY   127     0   33  99999    2
        RGBCHOLSEY 127     0 1425  99999    2
        RGBMDNHEAD 127     0 1525  99999    2

等等。我不知道该怎么做?

【问题讨论】:

    标签: python csv numpy pandas


    【解决方案1】:

    你可以使用pd.read_csv:

    >>> df = pd.read_csv("test_data2.csv", index_col=[0,1], skipinitialspace=True)
    >>> df
                           dep  freq   arr   code  mode
    from       to                                      
    RGBOXFD    RGBPADTON   127     0    27  99999     2
               RGBPADTON   127     0    33  99999     2
               RGBRDLEY    127     0  1425  99999     2
               RGBCHOLSEY  127     0    52  99999     2
               RGBMDNHEAD  127     0    91  99999     2
    RGBDIDCOTP RGBPADTON   127     0    46  99999     2
               RGBPADTON   127     0     3  99999     2
               RGBCHOLSEY  127     0    61  99999     2
               RGBRDLEY    127     0  1430  99999     2
               RGBPADTON   127     0   115  99999     2
    

    我使用skipinitialspace=True 来消除标题行中那些烦人的空格。

    【讨论】:

      【解决方案2】:

      from_csv() 的工作原理类似:

      import pandas as pd
      
      df = pd.DataFrame.from_csv(
          'data.txt',
          index_col = [0, 1]
      )
      
      print df
      
      --output:--
                              dep   freq   arr   code   mode
      from        to                                        
      RGBOXFD    RGBPADTON    127      0    27  99999      2
                 RGBPADTON    127      0    33  99999      2
                 RGBRDLEY     127      0  1425  99999      2
                 RGBCHOLSEY   127      0    52  99999      2
                 RGBMDNHEAD   127      0    91  99999      2
      RGBDIDCOTP RGBPADTON    127      0    46  99999      2
                 RGBPADTON    127      0     3  99999      2
                 RGBCHOLSEY   127      0    61  99999      2
                 RGBRDLEY     127      0  1430  99999      2
                 RGBPADTON    127      0   115  99999      2
      

      http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.from_csv.html#pandas.DataFrame.from_csv

      从这次讨论中,

      https://github.com/pydata/pandas/issues/4916

      看起来 read_csv() 的实现是为了让您设置更多选项,这使得 from_csv() 变得多余。

      【讨论】:

      • 仅供参考:from_csv 已被弃用(它与 read_csv 做同样的事情,但有一些令人惊讶的设置,有时在日期解析中表现得很奇怪)。
      • from_csv 已弃用我没有看到。
      • 你说得对,pandas 还没有弃用它。对不起!也就是说,我们一直在考虑弃用。它也有点奇怪,比如它默认为parses ints as dates,我猜我们一直是discussing deprecating it
      • Np。我阅读了您链接上的讨论以及它在上一篇文章中链接到的讨论,这是我在帖子中包含的链接。
      猜你喜欢
      • 2013-06-21
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      • 2019-03-22
      • 2016-04-01
      相关资源
      最近更新 更多