查看原文
其他

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

2017-06-27 王大伟 Python爱好者社区

(点击上方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爱好者社区


为大家提供与Python相关的最新技术和资讯。


长按指纹 > 识别图中二维码 > 添加关注

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存