十分钟入门pandas(下)【解读pandas官方文档】

浏览: 4194

前言

前文传送门:

十分钟入门pandas(上)【解读pandas官方文档】

十分钟入门pandas(中)【解读pandas官方文档】

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

数据透视表

查看更多内容:http://pandas.pydata.org/pandas-docs/version/0.20/reshaping.html#reshaping-pivot

import datetime

注:导入时间模块

df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 6,
'B': ['A', 'B', 'C'] * 8,
'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4,
'D': np.random.randn(24),
'E': np.random.randn(24),
'F': [datetime.datetime(2013, i, 1) for i in range(1, 13)] +
[datetime.datetime(2013, i, 15) for i in range(1, 13)]})
df

Clipboard Image.png

注:创建了一个dataframe

我们可以很容易地从这些数据生成数据透视表:

pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])

Clipboard Image.png

注:数据透视表玩法很多,大家通过帮助文档好好研究下


时间序列

pandas具有简单,强大和高效的功能,用于在频率转换期间执行重采样操作(例如,将数据转换为5分钟数据)。 这在金融应用中非常常见,但不限于此。 请参阅时间序列部分:http://pandas.pydata.org/pandas-docs/version/0.20/timeseries.html#timeseries

rng = pd.date_range('1/1/2012', periods=100, freq='S')
rng

Clipboard Image.png

                                                                            。。。。。。

                              Clipboard Image.png

首先创建了一个100秒时间戳的系列,s为second的意思。

频率:字符串或pandas偏移对象,可选 一个pandas日期偏移字符串或相应的对象

ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)
ts

将刚产生的时间序列rng作为索引index,随机产生0-500之间的整数作为值。

Clipboard Image.png

                    。。。。。。

Clipboard Image.png


将该系列缩小为5分钟,就是五分钟采样一次,并对其值进行求和:

ts.resample('5Min').sum()

时区表示

rng = pd.date_range('3/6/2012 00:00', periods=5, freq='D')
rng

Clipboard Image.png

注:产生5个数的时间序列,偏移量为D:Day,日期


ts = pd.Series(np.random.randn(len(rng)), rng)
ts

Clipboard Image.png

注:将产生的日期作为索引,产生日起数量(5个)的标准正态分布的数值


本地化时区表示:

ts_utc = ts.tz_localize('UTC')
ts_utc

Clipboard Image.png


转换成其他时区:

ts_utc.tz_convert('US/Eastern')

Clipboard Image.png

在时间跨度表示之间转换:

rng = pd.date_range('1/1/2012', periods=5, freq='M')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
ts

Clipboard Image.png

ps = ts.to_period()
ps

Clipboard Image.png

注:将时间日期索引转化为时间阶段索引(这里是用月份表示)


ps.to_timestamp()

Clipboard Image.png

注:用月份的初始日期表示


分类

自版本0.15以来,pandas可以在DataFrame中包含分类数据。 有关完整文档,请参阅分类介绍:http://pandas.pydata.org/pandas-docs/version/0.20/categorical.html#categorical

和API文档:http://pandas.pydata.org/pandas-docs/version/0.20/api.html#api-categorical

df = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":['a', 'b', 'b', 'a', 'a', 'e']})
df

Clipboard Image.png

将原始成绩转换为分类数据类型:

df["grade"] = df["raw_grade"].astype("category")
df["grade"]

Clipboard Image.png

注:显示成绩可以分为三类


将类别重命名为更有意义的名称

df["grade"].cat.categories = ["very good", "good", "very bad"]
df["grade"]

Clipboard Image.png

注:显示的就是分类信息了


df["grade"] = df["grade"].cat.set_categories(["very bad", "bad", "medium", "good", "very good"])
df["grade"]

Clipboard Image.png

注:显示的就是分类信息了


排序是按类别中的顺序排列的,而不是词法顺序

df.sort_values(by="grade")

Clipboard Image.png

注:根据成绩排序


按分类列分组还显示空类:

df.groupby("grade").size()

Clipboard Image.png

注:统计分类后每类元素个数


绘图

绘图更多用法:http://pandas.pydata.org/pandas-docs/version/0.20/visualization.html#visualization

import matplotlib.pyplot as plt

注:导入绘图模块

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
tts.cumsum()s.plot()
plt.show()

Clipboard Image.png

注:绘制时间序列图形,ts.cumsum()为累积值,绘图必须使用show()方法才能展现出来图。


在DataFrame中,plot()可以方便地绘制带有标签的所有列:

df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index,
columns=['A', 'B', 'C', 'D'])
df = df.cumsum()
plt.figure()
df.plot()
plt.legend(loc='best')
plt.show()

Clipboard Image.png


获取数据输入/输出

CSV

写入csv文件:http://pandas.pydata.org/pandas-docs/version/0.20/io.html#io-store-in-csv

df.to_csv('foo.csv')

读取csv文件:http://pandas.pydata.org/pandas-docs/version/0.20/io.html#io-read-csv-table

pd.read_csv('foo.csv')

Clipboard Image.png

                                                                  。。。。。。

Clipboard Image.png


Excel

读取和写入Excel文件:http://pandas.pydata.org/pandas-docs/version/0.20/io.html#io-excel

写入Excel:

df.to_excel('foo.xlsx', sheet_name='Sheet1')

读取Excel:

pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA'])

Clipboard Image.png

                                     。。。。。。             

Clipboard Image.png


易错点

如果你操作时遇到类似这种问题:

Clipboard Image.png

你可以看看这里的解释寻求帮助:http://pandas.pydata.org/pandas-docs/version/0.20/basics.html#basics-compare

也可以参考这里:http://pandas.pydata.org/pandas-docs/version/0.20/gotchas.html#gotchas


花了一天半时间把10分钟入门pandas官方文档解读了一下,大家有兴趣可以深入了解官方文档的内容,或者用到某部分再去查文档也是很ok的,哈哈。

感谢你的阅读~

推荐 4
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

9 个评论

谢谢分享
感谢
非常感谢
哈哈 写的对大家有帮助就好
谢谢支持
感谢~
谢谢支持
很棒的文章,以后有问题可以多多交流
感谢分享

要回复文章请先登录注册