1.pandas简介

        pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。

pandas 是第三方库,需要单独安装才能使用。

一般情况下,我们会像下面这样引入 pandas 模块:

import pandas as pd

        将 pandas 简写成 pd 几乎成了一种不成文的规定。因此,只要你看到 pd 就应该联想到这是 pandas。

2.pandas主要数据结构

Series(一维数据)和DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。

2.1Series

        Series 是一种类似于 Numpy 中一维数组的对象,它由一组任意类型的数据以及一组与之相关的数据标签(即索引)组成。

2.1.1直接创建数组

import pandas as pd

print(pd.Series([2,4,6,8]))
# 输出:
# 0    2
# 1    4
# 2    6
# 3    8
# dtype: int64

        左边的是数据的标签,默认是从0开始依次递增;右边是对应的数据,最后一行表示数据的类型。

2.1.2使用index参数自定义数据标签

import pandas as pd

print(pd.Series([2,4,6,8],index=['a','b','c','d']))
# 输出:
# a    2
# b    4
# c    6
# d    8
# dtype: int64

 2.1.3使用字典创建数组

        pandas会字典将字典的键作为数据标签,字典的值作为相应的数据。

import pandas as pd

print(pd.Series({'a': 2, 'b': 4, 'c': 6, 'd': 8}))
# 输出:
# a    2
# b    4
# c    6
# d    8
# dtype: int64

2.1.4获取数据

        访问Series的数据和Python中访问列表和字典元素的方式类似,使用中括号加数据标签的方式来获取其中的数据。

import pandas as pd

s1 = pd.Series([2, 4, 6, 8])
s2 = pd.Series({'a': 2, 'b': 4, 'c': 6, 'd': 8})

print(s1[0])
# 输出:2
print(s2['b'])
# 输出:4

2.1.5数据对齐功能介绍

相同数据标签的数据进行计算,这就是数据对齐。如果不用Series,用列表和字典需要使用循环来进行计算。

import pandas as pd

s1 = pd.Series({'辣条': 14, '面包': 7, '可乐': 8, '烤肠': 10})
s2 = pd.Series({'辣条': 20, '面包': 3, '可乐': 13, '烤肠': 6})
print(s1 + s2)
# 输出:
# 辣条    34
# 面包    10
# 可乐    21
# 烤肠    16
# dtype: int64

        如果两个一维数组的数据标签内容不相同,则会有以下的输出结果。除了两个一维数组中相同的数据标签进行了相加,其他的只有一个的为NaN(NaN,是Not a Number,不是一个数字的缩写),因为其中一个Series中没有对应数据标签的数据,无法进行计算,所以返回NaN。

import pandas as pd

s1 = pd.Series({'辣条': 14, '面包': 7, '可乐': 8, '烤肠': 10})
s2 = pd.Series({'辣条': 20, '面包': 3, '雪碧': 13, '泡面': 6})
print(s1 + s2)
# 输出:
# 可乐     NaN
# 泡面     NaN
# 烤肠     NaN
# 辣条    34.0
# 雪碧     NaN
# 面包    10.0
# dtype: float64

add()方法,并设置其中的fill_value参数即可。

import pandas as pd

s1 = pd.Series({'辣条': 14, '面包': 7, '可乐': 8, '烤肠': 10})
s2 = pd.Series({'辣条': 20, '面包': 3, '雪碧': 13, '泡面': 6})
print(s1.add(s2,fill_value=0))
# 输出:
# 可乐     8.0
# 泡面     6.0
# 烤肠    10.0
# 辣条    34.0
# 雪碧    13.0
# 面包    10.0
# dtype: float64

         数学中的四则运算再pandas中都有对应的方法,并且用法相似。

pandas中的四则运算

方法

示例

加法

add()

s1.add(s2, fill_value=0)

减法

sub()

s1.sub(s2, fill_value=0)

乘法

mul()

s1.mul(s2, fill_value=0)

除法

div()

s1.div(s2,fill_value=0)

2.2DataFrame

        Series是一维数据,而DataFrame是二维数据。可以把DataFrame想象成一个表格,表格有行和列两个维度,所以是二维数据。并且,表格中的每一行或者每一列都是一个Series,这些Series组成了DataFrame。

2.2.1直接创建二维数据

import pandas as pd

pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)

df = pd.DataFrame({'辣条': [14, 20], '面包': [7, 3], '可乐': [8, 13], '烤肠': [10, 6]})
print(df)
# 输出:
#    辣条  面包  可乐  烤肠
# 0    14     7     8    10
# 1    20     3    13     6

pd.set_option()使表格对齐显示。

2.2.2使用字典创建二维数据

长度必须相等。得到的表格,字典的键会作为表格的列名,最左边的是索索引(Index),默认是从0依次开始递增,也可以在构建DataFrame的时候传入index参数来定义索引。

import pandas as pd

pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)

data = {
  '辣条': [14, 20],
  '面包': [7, 3],
  '可乐': [8, 13],
  '烤肠': [10, 6]
}
df = pd.DataFrame(data, index=['2020-01-01', '2020-01-02'])
print(df)
# 输出:
#             辣条  面包  可乐  烤肠
# 2020-01-01  14   7   8  10
# 2020-01-02  20   3  13   6

2.2.3列的增删改查

import pandas as pd
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)

df = pd.DataFrame({'辣条': [14, 20], '面包': [7, 3], '可乐': [8, 13], '烤肠': [10, 6]})

#增
df['香蕉']=[1,2]
print(df)

#删
df.drop('面包', axis=1, inplace=True)#axis=0表示删除对应的行,axis=1表示删除对应的列;
                                    #inplace=True表示对原数据进行修改,inplace=False表示只返回修改的数据,对原表格无影响
print(df)
# 或者 print(df.drop('面包', axis=1))

#改
df['可乐']=[11,22]
print(df)

#查
print(df['可乐']) #查多个数据时只要把多个列名放入列表中即可,print(df[['可乐', '辣条']])

2.3表格文件相关操作

import pandas as pd

df = pd.read_csv('xxx.csv')#读入csv文件
#df = pd.read_csv('xxx.xlsx',sheet_name='lala')#读入excel文件,默认为第一张工作表,可以指定
print(type(df))
# 输出:<class 'pandas.core.frame.DataFrame'>

df.sort_values('xx',ascending=Flase,inplace=True)#根据xx进行降序排列,默认为升序,
                                                  #将ascending设置为False则为降序

df.to_csv('xxx.csv')#输出csv文件,存在相同名称则覆盖,没有则创建
#df.to_excel('xxx.xlsx') #输出excel文件,存在相同名称则覆盖,没有则创建

head()方法可以查看前5条数据,而且,在括号中填入数字可控制查看的条数。tail()方法与之类似,默认查看末尾5条数据。

print(df.head()) #查看前5条数据
print(df.head(1))#查看第1条数据

print(df.tail()) #查看最后5条数据
print(df.tall(2))#查看最后2条数据

info()方法查看整个表格的大致信息。包括行数、列数、列名、数据类型等。describe()方法快速查看数据的统计摘要,包括数据数量、平均数、标准差、最小值、25%50%75%位置的值和最大值。

print(df.info())
print(df.describe())