Pandas read_fwf忽略列

时间:2016-06-04 11:59:17

标签: python pandas

我有一个.asc文件,其中每行有655个条目,看起来有点像以下(注意前导空格)

 -999 -999 -999 -999 -999 -999 -999 -999 -999 ... -999 -999

当我使用pandas read_fwf

读取文件时
data = pd.read_fwf('Users/.../file.asc', index_col=False, sep=' ', skiprows=6, header=None, na_values=[-999])

前三列被抛入0列,以便获得输出

                   0    1    2    3    4    5    6    7    8    9   ...   641  \
0  -999 -999 -999 -999  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN 

似乎该函数将我的前4列解释为索引。 index_col=False没有帮助解决问题。此外,我试图让pandas创建一个索引列但无法找到此功能。

期待您的解决方案。感谢。

2 个答案:

答案 0 :(得分:3)

UPDATE2:在调用colspecs时使用read_fwf()参数

In [83]: df = pd.read_fwf(fn, skiprows=6, header=None, na_values=[-999],
   ....:                  colspecs=[(5,6)] * 654)


In [84]: df.head()
Out[84]:
   0    1    2    3    4    5    6    7    8    9   ...   644  645  646  647  648  649  650  651  652  653
0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
3  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
4  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN

[5 rows x 654 columns]

<强>更新

使用read_csv()代替read_fwf(),它会起作用:

In [61]: fn = r'D:\download\BRD_8110_YY_GIS.asc'

In [62]: df = pd.read_csv(fn, skiprows=6, header=None, na_values=[-999], delim_whitespace=True)

In [63]: df.head()
Out[63]:
   0    1    2    3    4    5    6    7    8    9   ...   644  645  646  647  648  649  650  651  652  653
0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
3  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
4  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN

[5 rows x 654 columns]

答案 1 :(得分:0)

使用sep='\s+'作为关键字参数,如pandas - read_fwf的当前文档中所述,接受1个或多个空格字符作为字段的spearators。我不愿意提供'\s*',因为这意味着0或更多可能会让你陷入麻烦; - )