- 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/
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!