十分钟入门pandas(中)【解读pandas官方文档】
(点击上方Python爱好者社区,可快速关注)
作者:王大伟
博客专栏:https://www.hellobi.com/u/wangdawei/articles
Python爱好者社区 唯一小编
接着前文继续
前文传送门:十分钟入门pandas(上)【解读pandas官方文档】
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
df
缺失值处理
pandas主要使用值np.nan来表示丢失的数据。 默认情况下不包括在计算中。 请参阅缺少数据部分:http://pandas.pydata.org/pandas-docs/version/0.20/missing_data.html#missing-data
重新索引允许您更改/添加/删除指定轴上的索引。 这将返回数据的副本。
df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
df1.loc[dates[0]:dates[1],'E'] = 1
df1
注:增加了一个新列E,并且给E列第一行和第二行数据赋值为1,则没赋值的数据显示不存在。
删除存在缺失值的行:
df1.dropna(how='any')
填充缺失值:
df1.fillna(value=5)
注:这里使用5去填充,实际中,我们做数据分析常用0,中位数,平均数来填充。
查看空值数据:
pd.isnull(df1)
注:返回True的是空值数据
操作
请参阅二进制操作的基本部分:http://pandas.pydata.org/pandas-docs/version/0.20/basics.html#basics-binop
统计
操作中一般不包含丢失的数据
执行描述性统计:
df.mean() #求每列平均值
df.mean(1) #每行求平均值
Apply
将功能用于处理数据
df.apply(np.cumsum)
注:列累加,就是第二列的结果等于第一列加第二列数据,依次累加。
使用匿名函数求每列的最大值和最小值的差:
df.apply(lambda x: x.max() - x.min())
直方图化
直方图和离散化查看更多资料:http://pandas.pydata.org/pandas-docs/version/0.20/basics.html#basics-discretization
s = pd.Series(np.random.randint(0, 7, size=10))
s
注:在0-7中随机产生10个整数
s.value_counts()
注:对数据进行计数
操作字符串的方法
字符串方法
Series中配置了一组字符串处理方法,使其易于在数组的每个元素上进行操作,如下面的代码片段所示。请注意,str中的模式匹配通常默认使用正则表达式(在某些情况下始终使用它们)。 在矢量化字符串方法中查看更多:http://pandas.pydata.org/pandas-docs/version/0.20/text.html#text-string-methods
正则表达式:https://docs.python.org/2/library/re.html
s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])
注:创建一个Series
s.str.lower()
注:把其中所有的英文字母变成小写
合并
字符连接
合并操作更多内容:http://pandas.pydata.org/pandas-docs/version/0.20/merging.html#merging
将pandas对象用concat()连接在一起
df = pd.DataFrame(np.random.randn(10, 4))
df
注:产生一个10行4列的标准正态分布
pieces = [df[:3], df[3:7], df[7:]]
pieces
注:切成三块
pd.concat(pieces)
注:将碎块合并
join加入操作
SQL风格合并。 请参阅数据库风格加入:http://pandas.pydata.org/pandas-docs/version/0.20/merging.html#merging-join
left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
left
right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
right
注:使用dict的方式创建两个dataframe
pd.merge(left, right, on='key')
注:连接之后的效果如上图,有点像笛卡尔积操作。
另外举个例子:
left = pd.DataFrame({'key': ['foo', 'bar'], 'lval': [1, 2]})
left
right = pd.DataFrame({'key': ['foo', 'bar'], 'rval': [4, 5]})
right
pd.merge(left, right, on='key')
Append
给dataframe添加行,参考http://pandas.pydata.org/pandas-docs/version/0.20/merging.html#merging-concatenation
df = pd.DataFrame(np.random.randn(8, 4), columns=['A','B','C','D'])
df
s = df.iloc[3]
df.append(s, ignore_index=True)
注:将第三行复制一份添加到了最后一行(增加了一行)
分组
通过“group by”,我们指的是涉及一个或多个以下步骤的过程:
1.根据一些标准将数据分成组
2.将功能独立应用于每个组
3.将结果合并成数据结构
更多内容参考:http://pandas.pydata.org/pandas-docs/version/0.20/groupby.html#groupby
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : np.random.randn(8),
'D' : np.random.randn(8)})
df
注:生成了一个数据框
分组,然后对结果组应用函数求和:
df.groupby('A').sum()
注:通过A列中的数据分组,A列中只有bar和foo,所以分为两组,求和时候因为只有C/D列是数字,所以只应用在C/D列上求和
按多个列分组形成一个分层索引,然后我们应用函数:
df.groupby(['A','B']).sum()
注:相当于在根据A列分组的基础上在B列细分,再求和
资料重塑
请参阅有关分层索引和资料重塑的部分:
http://pandas.pydata.org/pandas-docs/version/0.20/advanced.html#advanced-hierarchical
http://pandas.pydata.org/pandas-docs/version/0.20/reshaping.html#reshaping-stacking
Stack堆
tuples = list(zip(*[['bar', 'bar', 'baz', 'baz',
'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two',
'one', 'two', 'one', 'two']]))
tuples
注:创建了一个list,并且用zip方法整合合并成内部是tuple形式
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
index
注:将数据转为MultiIndex结构,即从字面上理解为多索引结构
df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])
df
df2 = df[:4]
注:取出前四行数据
stack()方法“压缩”DataFrame的列。
stacked = df2.stack()
stacked
注:说实话,这个我也没看懂。。
使用“堆叠”DataFrame或Series(具有MultiIndex作为索引),stack()的反向操作是unpack(),它默认情况下解除最后一个级别
unstack会默认多层索引的series转变为DataFrame
stacked.unstack()
stacked.unstack(1)
stacked.unstack(0)
通过level指定操作索引的级别
未完待续~~~~~~~~~~~~~
新福利:Kenny 7月11日在Hellobi Live直播 《自然语言处理之-基于深度学习技术的诗歌写作机器人》内容:
1、 写诗机器人效果展示
2、 基于深度学习写诗机器人训练数据收集,清洗,导入
3、 诗歌数据预处理,特征化和数值化后转化为可训练的数据
4、 写诗机器人模块介绍
5、 写诗机器人算法介绍
6、 写诗机器人的实现及效果评估
付费参加方式:点击阅读原文报名
免费参加方式:长按下图,关注公众号Python爱好者社区,在菜单栏点击免费听课参加活动
关注公众号,“Python爱好者社区”,回复“爬虫”即可获取崔老师爬虫免费学习视频。
为大家提供与Python相关的最新技术和资讯。
长按指纹 > 识别图中二维码 > 添加关注