我有一个.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创建一个索引列但无法找到此功能。
期待您的解决方案。感谢。
答案 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或更多可能会让你陷入麻烦; - )