2017-04-24 58 views
1

我期待在这里发表的文本文件,因为我无法找到大气二氧化碳浓度的历史更清洁的表的任何地方:将此数据读入熊猫数据框的优雅方法?

https://data.giss.nasa.gov/modelforce/ghgases/Fig1A.ext.txt

我试图找出如何将这个文件读入熊猫,而不必先执行尴尬的文本编辑器操作。有没有办法做到这一点?

我在编辑器中做的方式是首先从文本文件中删除所有的单词,然后使用read_table,但是我必须提供一些指令来解释数据的年份, ppm,year,ppm等。我不知道该怎么做,也不禁想知道是否有一种聪明的方式来用python自动识别冒犯的单词并忽略它们?

+1

最优雅是见仁见智。 IMO最优雅的方式是创建一个新的文本文件。 – piRSquared

+0

请问你用什么编辑器来包装重复的(年,ppm)组的列?谢谢! – theverge

回答

1

如果使用pandas.read_fwf,那是相当直截了当:

代码:

df = pd.read_fwf(
    'https://data.giss.nasa.gov/modelforce/ghgases/Fig1A.ext.txt', 
    header=None, skiprows=5, nrows=50, 
    colspecs=[(8, 12), (14, 20), (28, 32), (34, 40), 
       (48, 52), (54, 60), (68, 72), (74, 80)]) 

years = np.concatenate([df[i].values for i in range(0, 8, 2)]) 
temps = np.concatenate([df[i].values for i in range(1, 8, 2)]) 
df = pd.DataFrame(temps, index=years, columns=['temps']).dropna() 
print(df) 

结果:

  temps 
1850.0 285.20 
1851.0 285.10 
1852.0 285.00 
1853.0 285.00 
1854.0 284.90 
...  ... 
2007.0 383.37 
2008.0 385.46 
2009.0 386.95 
2010.0 389.21 
2011.0 391.15 

[162 rows x 1 columns] 
+0

不错,谢谢! – theverge

+0

@theverge,你非常欢迎。然而,在所以最好的方式表示感谢是upvote *任何*您认为有用的问题或答案。在你的问题中,如果其中一个答案非常适合你的问题,你可以将其标记为接受的答案。有关准则,请参阅[帮助中心](http://stackoverflow.com/help/someone-answers)。 –

+0

谢谢。由于奇怪的SO系统,我不能提出答案,因为在这个系统中,人们必须首先证明其中一个值得优先考虑。如果我接受你的答案,并且有更简单的答案出现,我是否仍然能够接受这个答案? – theverge