- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想将全局地表温度绘制成时间序列图,并使用 NASA GISS 数据。数据按年、月和季节组织。
我想将它显示为从 1880 年 1 月到 2016 年 2 月的时间序列,显示每个月的值。
读入数据并编码NA值
import pandas as pd
data = pd.read_csv("http://data.giss.nasa.gov/gistemp/tabledata_v3/GLB.Ts+dSST.csv",
na_values = ["**** ","*** "])
选择必要的数据
df = data.ix[:,1:19]
添加年份列
df['Year'] = data[' Year']
我试过制作一个按年份排序的数据透视表,但这只会重现原始数据框。
table = pd.pivot_table(df, index = df['Year'], values=['Jan','Feb', 'Mar','Apr','May','Jun',
'Jul','Aug','Sep','Oct','Nov','Dec'])
我希望数据框有一列按年份索引的数据值,每年每个月有 12 个值,我认为数据透视表可以做到这一点,但我看不出哪里出错了。
最佳答案
import pandas as pd
data = pd.read_csv("http://data.giss.nasa.gov/gistemp/tabledata_v3/GLB.Ts+dSST.csv",
na_values = ["**** ","*** "])
print data.head()
df1 = pd.melt(data, id_vars=[' Year'], value_vars=['Jan','Feb', 'Mar','Apr','May','Jun',
'Jul','Aug','Sep','Oct','Nov','Dec'], var_name='Month').rename(columns={' Year':'Year'})
print df1.columns
Index([u'Year', u'Month', u'value'], dtype='object')
print df1
Year Month value
0 1880 Jan -29
1 1881 Jan -9
2 1882 Jan 10
3 1883 Jan -33
4 1884 Jan -17
5 1885 Jan -63
6 1886 Jan -40
7 1887 Jan -64
8 1888 Jan -42
9 1889 Jan -18
10 1890 Jan -46
11 1891 Jan -44
12 1892 Jan -25
13 1893 Jan -66
14 1894 Jan -53
15 1895 Jan -42
16 1896 Jan -22
17 1897 Jan -21
18 1898 Jan -5
19 1899 Jan -16
20 1900 Jan -38
21 1901 Jan -28
22 1902 Jan -18
23 1903 Jan -26
24 1904 Jan -63
25 1905 Jan -36
26 1906 Jan -29
27 1907 Jan -42
28 1908 Jan -44
29 1909 Jan -69
... ... ... ...
1614 1987 Dec 48
1615 1988 Dec 33
1616 1989 Dec 36
1617 1990 Dec 41
1618 1991 Dec 32
1619 1992 Dec 22
1620 1993 Dec 19
1621 1994 Dec 36
1622 1995 Dec 30
1623 1996 Dec 40
1624 1997 Dec 59
1625 1998 Dec 57
1626 1999 Dec 47
1627 2000 Dec 30
1628 2001 Dec 54
1629 2002 Dec 42
1630 2003 Dec 73
1631 2004 Dec 51
1632 2005 Dec 67
1633 2006 Dec 78
1634 2007 Dec 49
1635 2008 Dec 54
1636 2009 Dec 64
1637 2010 Dec 48
1638 2011 Dec 53
1639 2012 Dec 52
1640 2013 Dec 66
1641 2014 Dec 79
1642 2015 Dec 110
1643 2016 Dec NaN
[1644 rows x 3 columns]
然后您可以通过to_datetime
创建新的Datetimeindex
与 astype
:
df1.index = pd.to_datetime(df1['Year'].astype(str) + df1['Month'], format='%Y%b')
timeserie = df1['value'].head()
print timeserie.head()
1880-01-01 00:00:00 -29
1881-01-01 00:00:00 -9
1882-01-01 00:00:00 10
1883-01-01 00:00:00 -33
1884-01-01 00:00:00 -17
Name: value, dtype: float64
print df1.index
DatetimeIndex(['1880-01-01', '1881-01-01', '1882-01-01', '1883-01-01',
'1884-01-01', '1885-01-01', '1886-01-01', '1887-01-01',
'1888-01-01', '1889-01-01',
...
'2007-12-01', '2008-12-01', '2009-12-01', '2010-12-01',
'2011-12-01', '2012-12-01', '2013-12-01', '2014-12-01',
'2015-12-01', '2016-12-01'],
dtype='datetime64[ns]', length=1644, freq=None)
或者,如果您需要 PeriodIndex
,请使用 to_period
:
df1.index = pd.to_datetime(df1['Year'].astype(str) + df1['Month'], format='%Y%b')
df1.index = df1.index.to_period('M')
timeserie = df1['value'].head()
print timeserie.head()
1880-01 -29
1881-01 -9
1882-01 10
1883-01 -33
1884-01 -17
Freq: M, Name: value, dtype: float64
print df1.index
PeriodIndex(['1880-01', '1881-01', '1882-01', '1883-01', '1884-01', '1885-01',
'1886-01', '1887-01', '1888-01', '1889-01',
...
'2007-12', '2008-12', '2009-12', '2010-12', '2011-12', '2012-12',
'2013-12', '2014-12', '2015-12', '2016-12'],
dtype='int64', length=1644, freq='M')
或者您可以先选择 df
列 Year
和 months by ix
然后使用 set_index
与 stack
.最后你可以添加 reset_index
设置列 names
:
import pandas as pd
data = pd.read_csv("http://data.giss.nasa.gov/gistemp/tabledata_v3/GLB.Ts+dSST.csv",
na_values = ["**** ","*** "])
print data.head()
df = data.ix[:,0:13]
print df.columns
Index([u' Year', u'Jan', u'Feb', u'Mar', u'Apr', u'May', u'Jun', u'Jul',
u'Aug', u'Sep', u'Oct', u'Nov', u'Dec'],
dtype='object')
table = df.set_index(' Year').stack().reset_index()
table.columns = ['Year','Month','Value']
print table
Year Month Value
0 1880 Jan -29
1 1880 Feb -20
2 1880 Mar -18
3 1880 Apr -27
4 1880 May -14
5 1880 Jun -28
6 1880 Jul -23
7 1880 Aug -7
8 1880 Sep -16
9 1880 Oct -16
10 1880 Nov -18
11 1880 Dec -21
12 1881 Jan -9
13 1881 Feb -13
14 1881 Mar 1
15 1881 Apr -3
16 1881 May -4
17 1881 Jun -28
18 1881 Jul -6
19 1881 Aug -2
20 1881 Sep -8
21 1881 Oct -19
22 1881 Nov -26
23 1881 Dec -15
24 1882 Jan 10
25 1882 Feb 9
26 1882 Mar 2
27 1882 Apr -20
28 1882 May -17
29 1882 Jun -25
... ... ... ...
1604 2013 Sep 76
1605 2013 Oct 69
1606 2013 Nov 80
1607 2013 Dec 66
1608 2014 Jan 73
1609 2014 Feb 50
1610 2014 Mar 77
1611 2014 Apr 78
1612 2014 May 86
1613 2014 Jun 66
1614 2014 Jul 58
1615 2014 Aug 81
1616 2014 Sep 90
1617 2014 Oct 85
1618 2014 Nov 68
1619 2014 Dec 79
1620 2015 Jan 81
1621 2015 Feb 87
1622 2015 Mar 90
1623 2015 Apr 73
1624 2015 May 78
1625 2015 Jun 78
1626 2015 Jul 73
1627 2015 Aug 78
1628 2015 Sep 82
1629 2015 Oct 106
1630 2015 Nov 103
1631 2015 Dec 110
1632 2016 Jan 114
1633 2016 Feb 135
[1634 rows x 3 columns]
关于python - 使用 Pandas 按年显示每月列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35986284/
我正在处理一组标记为 160 个组的 173k 点。我想通过合并最接近的(到 9 或 10 个组)来减少组/集群的数量。我搜索过 sklearn 或类似的库,但没有成功。 我猜它只是通过 knn 聚类
我有一个扁平数字列表,这些数字逻辑上以 3 为一组,其中每个三元组是 (number, __ignored, flag[0 or 1]),例如: [7,56,1, 8,0,0, 2,0,0, 6,1,
我正在使用 pipenv 来管理我的包。我想编写一个 python 脚本来调用另一个使用不同虚拟环境(VE)的 python 脚本。 如何运行使用 VE1 的 python 脚本 1 并调用另一个 p
假设我有一个文件 script.py 位于 path = "foo/bar/script.py"。我正在寻找一种在 Python 中通过函数 execute_script() 从我的主要 Python
这听起来像是谜语或笑话,但实际上我还没有找到这个问题的答案。 问题到底是什么? 我想运行 2 个脚本。在第一个脚本中,我调用另一个脚本,但我希望它们继续并行,而不是在两个单独的线程中。主要是我不希望第
我有一个带有 python 2.5.5 的软件。我想发送一个命令,该命令将在 python 2.7.5 中启动一个脚本,然后继续执行该脚本。 我试过用 #!python2.7.5 和http://re
我在 python 命令行(使用 python 2.7)中,并尝试运行 Python 脚本。我的操作系统是 Windows 7。我已将我的目录设置为包含我所有脚本的文件夹,使用: os.chdir("
剧透:部分解决(见最后)。 以下是使用 Python 嵌入的代码示例: #include int main(int argc, char** argv) { Py_SetPythonHome
假设我有以下列表,对应于及时的股票价格: prices = [1, 3, 7, 10, 9, 8, 5, 3, 6, 8, 12, 9, 6, 10, 13, 8, 4, 11] 我想确定以下总体上最
所以我试图在选择某个单选按钮时更改此框架的背景。 我的框架位于一个类中,并且单选按钮的功能位于该类之外。 (这样我就可以在所有其他框架上调用它们。) 问题是每当我选择单选按钮时都会出现以下错误: co
我正在尝试将字符串与 python 中的正则表达式进行比较,如下所示, #!/usr/bin/env python3 import re str1 = "Expecting property name
考虑以下原型(prototype) Boost.Python 模块,该模块从单独的 C++ 头文件中引入类“D”。 /* file: a/b.cpp */ BOOST_PYTHON_MODULE(c)
如何编写一个程序来“识别函数调用的行号?” python 检查模块提供了定位行号的选项,但是, def di(): return inspect.currentframe().f_back.f_l
我已经使用 macports 安装了 Python 2.7,并且由于我的 $PATH 变量,这就是我输入 $ python 时得到的变量。然而,virtualenv 默认使用 Python 2.6,除
我只想问如何加快 python 上的 re.search 速度。 我有一个很长的字符串行,长度为 176861(即带有一些符号的字母数字字符),我使用此函数测试了该行以进行研究: def getExe
list1= [u'%app%%General%%Council%', u'%people%', u'%people%%Regional%%Council%%Mandate%', u'%ppp%%Ge
这个问题在这里已经有了答案: Is it Pythonic to use list comprehensions for just side effects? (7 个答案) 关闭 4 个月前。 告
我想用 Python 将两个列表组合成一个列表,方法如下: a = [1,1,1,2,2,2,3,3,3,3] b= ["Sun", "is", "bright", "June","and" ,"Ju
我正在运行带有最新 Boost 发行版 (1.55.0) 的 Mac OS X 10.8.4 (Darwin 12.4.0)。我正在按照说明 here构建包含在我的发行版中的教程 Boost-Pyth
学习 Python,我正在尝试制作一个没有任何第 3 方库的网络抓取工具,这样过程对我来说并没有简化,而且我知道我在做什么。我浏览了一些在线资源,但所有这些都让我对某些事情感到困惑。 html 看起来
我是一名优秀的程序员,十分优秀!