【问题标题】:How to read txt file in pandas with multiple delimiters?如何在带有多个分隔符的熊猫中读取 txt 文件?
【发布时间】:2016-08-02 06:26:39
【问题描述】:

我有一个如下所示的文本文件:

1
    SWAT May 20 2015    VER 2015/Rev 637                                                                 0/ 0/   0      0: 0: 0

    General Input/Output section (file.cio):                                        
    3/23/2016 12:00:00 AM ARCGIS-SWAT interface AV                                  



           RES  MON    VOLUMEm3  FLOW_INcms FLOW_OUTcms    PRECIPm3      EVAPm3   SEEPAGEm3  SED_INtons SED_OUTtons SED_CONCppm   ORGN_INkg  ORGN_OUTkg RES_ORGNppm   ORGP_INkg  ORGP_OUTkg RES_ORGPppm    NO3_INkg   NO3_OUTkg  RES_NO3ppm    NO2_INkg   NO2_OUTkg  RES_NO2ppm    NH3_INkg   NH3_OUTkg  RES_NH3ppm   MINP_INkg  MINP_OUTkg RES_MINPppm   CHLA_INkg  CHLA_OUTkgSECCHIDEPTHm   PEST_INmg  REACTPSTmg    VOLPSTmg  SETTLPSTmgRESUSP_PSTmgDIFFUSEPSTmgREACBEDPSTmg   BURYPSTmg  PEST_OUTmgPSTCNCWmg/m3PSTCNCBmg/m3
RES          1    1  0.6062E+07  0.6285E+00  0.0000E+00  0.8282E+05  0.6664E+05  0.0000E+00  0.1900E+02  0.0000E+00  0.6782E+02  0.3444E+04  0.0000E+00  0.1546E-01  0.6055E+03  0.0000E+00  0.1315E-02  0.1358E+04  0.0000E+00  0.6315E-02  0.1422E+02  0.0000E+00  0.9853E-04  0.1722E+04  0.0000E+00  0.9114E-02  0.5736E+03  0.0000E+00  0.1543E-02  0.0000E+00  0.0000E+00  0.3960E+01  0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00

我尝试了使用不同分隔符的代码,但结果数据框总是只有一列:

> df=pd.read_csv('output.rsv', skiprows=5, sep='\t', engine='python')

我想用这些数据做的只是把这个文本分成这样的列:

RES MON VOLUMEm3
1   1   1000
2   1   1000
...

【问题讨论】:

  • 一个想法:我会尝试用skiprows = 9, header = None, sep='\s+' 和nrows = some_small_number 切断整个标题,首先是一小块。希望分隔符不是一些奇怪的 unicode 字符。

标签: python-2.7 pandas


【解决方案1】:

\s+ 分隔符可以工作:

df = pd.read_csv(os.path.join(maindir, 'EDMA_1_rcp26_2025_1_output.rsv'),\
skiprows = 9, delimiter = r'\s+', header = None)

其实很简单。

【讨论】:

    【解决方案2】:
    pd.read_csv(filename, skiprows=5, skipinitialspace=True, sep=' ')
    

    您可能需要sep='\t',具体取决于您的文本文件的编码方式。

    当我复制上面的数据并粘贴到一个 .txt 文件中时,这对我有用。

    【讨论】:

    • 是的,我可以读取文件,但数据框有维度 (1300,1),但我需要具有多列 (1300,31) 的数据框。
    猜你喜欢
    • 2014-08-27
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    相关资源
    最近更新 更多