python数据分析之pandas库

 

pandas常用操作

一、  Series

Pandas是基于NumPy的Python 库,被广泛用于快速分析数据,以及数据清洗和准备等工作。Pandas 有两种数据结构:Series和DataFrame。Series是一种类似一维数据的数据结构,由数据(values)及索引(indexs)组成,而DataFrame是一个表格型的数据结构。

1、  Series数据操作

Series是一种一维数组结构,它由两个部分组成:索引。索引是一个标签数组,可以用来标识数据。值可以是任何类型的数据,例如整数、浮点数、字符串等。Series提供了类似于Numpy数组的操作,同时也支持类似于Python字典的操作。

pandas.Series( data, index, dtype, name, copy)

参数说明:

● data:一组数据(ndarray 类型)。

● index:数据索引标签,如果不指定,默认从 0 开始。

● dtype:数据类型,默认会自己判断。

● name:设置名称。

● copy:拷贝数据,默认为 False。

创建series,默认有几种方式:python列表、numpy数组、Series。

1)  使用列表

列表创建,如下:

import pandas as pd

s1= pd.Series([1,3,5,7,9])

print(s1)

 

 

2)  数组numpy

使用Numpy数组创建Series:

import pandas as pd

import  numpy as np

s1= pd.Series(np.array([1,3,5,7,9]))

print(s1)

此处np.array的作用是什么?

 

3)  字典创建

使用字典创建Series:

import pandas as pd

s1= pd.Series({'Python':50,'Java':30,'C++':20})

print(s1)

2、  Series访问方式

1)  可以通过索引标签访问

例如

import pandas as pd

subject = pd.Series(['数学','语文','英语','历史','政治'], index=['a', 'b', 'c', 'd', 'e'])

print(subject)

# 通过整数位置访问元素

print(subject['a'])

print(subject['c'])

 

2)  整数位置来

import numpy as np

import pandas as pd

subject = pd.Series(['数学','语文','英语','历史','政治'], index=['a', 'b', 'c', 'd', 'e'])

print(subject)

# 通过整数位置访问元素

print(subject[0])

print(subject[2])

 

3)  使用.loc和.iloc属性访问元素

.loc用于通过索引标签访问元素,.iloc用于通过整数位置访问元素

subject = pd.Series(['数学','语文','英语','历史','政治'], index=['a', 'b', 'c', 'd', 'e'])

print(subject)

# 通过整数位置访问元素

# 使用.loc属性访问元素

print(subject.loc['a'])

print(subject.loc['e'])

 

import pandas as pd

subject = pd.Series(['数学','语文','英语','历史','政治'], index=['a', 'b', 'c', 'd', 'e'])

print(subject)

# 通过整数位置访问元素

# 使用.loc属性访问元素

print(subject.iloc[0])

print(subject.iloc[4])

 

4)  切片访问

import pandas as pd

subject = pd.Series(['数学','语文','英语','历史','政治'], index=['a', 'b', 'c', 'd', 'e'])

# 使用整数位置切片

print(subject[0:4])

 

import pandas as pd

subject = pd.Series(['数学','语文','英语','历史','政治'], index=['a', 'b', 'c', 'd', 'e'])

# 使用整数位置切片

print(subject['a':'d'])

 

二、  Dataframe

1、  读取命令

函数

说明

pd.read_csv(filename)

读取 CSV 文件;

pd.read_excel(filename)

读取 Excel 文件;

pd.read_sql(query, connection_object)

从 SQL 数据库读取数据;

pd.read_json(json_string)

从 JSON 字符串中读取数据;

pd.read_html(url)

从 HTML 页面中读取数据。

实例

import pandas as pd

 

# 从 CSV 文件中读取数据

df = pd.read_csv('data.csv')

 

# 从 Excel 文件中读取数据

df = pd.read_excel('data.xlsx')

 

 

-------------不确定语法

# 从 SQL 数据库中读取数据

import sqlite3

conn = sqlite3.connect('database.db')

df = pd.read_sql('SELECT * FROM table_name', conn)

 

# 从 JSON 字符串中读取数据

json_string = '{"name": "John", "age": 30, "city": "New York"}'

df = pd.read_json(json_string)

 

# 从 HTML 页面中读取数据

url = 'https://www.runoob.com'

dfs = pd.read_html(url)

df = dfs[0] # 选择第一个数据框

 

2、  查看数据

函数

说明

df.head(n)

显示前 n 行数据;

df.tail(n)

显示后 n 行数据;

df.info()

显示数据的信息,包括列名、数据类型、缺失值等;

df.describe()

显示数据的基本统计信息,包括均值、方差、最大值、最小值等;

df.shape

显示数据的行数和列数。

实例

# 显示前五行数据

df.head()

 

# 显示后五行数据

df.tail()

 

# 显示数据信息

df.info()

 

# 显示基本统计信息

df.describe()

 

# 显示数据的行数和列数

df.shape

实例

import pandas as pd

 

data = [

{"name": "Google", "likes": 25, "url": "https://www.google.com"},

{"name": "Runoob", "likes": 30, "url": "https://www.runoob.com"},

{"name": "Taobao", "likes": 35, "url": "https://www.taobao.com"}

]

 

df = pd.DataFrame(data)

# 显示前两行数据

print(df.head(2))

# 显示前最后一行数据

print(df.tail(1))

 

3、  数据清洗

函数

说明

df.dropna()

删除包含缺失值的行或列;

df.fillna(value)

将缺失值替换为指定的值;

df.replace(old_value, new_value)

将指定值替换为新值;

df.duplicated()

检查是否有重复的数据;

df.drop_duplicates()

删除重复的数据。

实例

# 删除包含缺失值的行或列

df.dropna()

 

# 将缺失值替换为指定的值

df.fillna(0)

 

# 将指定值替换为新值

df.replace('old_value', 'new_value')

 

# 检查是否有重复的数据

df.duplicated()

 

# 删除重复的数据

df.drop_duplicates()

 

如果我们要删除包含空字段的行,可以使用 dropna() 方法,语法格式如下:

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)参数说明:

● axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。

● how:默认为 'any' 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how='all' 一行(或列)都是 NA 才去掉这整行。

● thresh:设置需要多少非空值的数据才可以保留下来的。

● subset:设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。

● inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。

例如删除na值,可以先定义哪些为na值,例如下面案例将n/a、na、--统一识别为na_values,然后进行删除。按照如下代码表示

import pandas as pd

missing_values = ["n/a", "na", "--"]

df = pd.read_csv('property-data.csv', na_values = missing_values)

print (df['NUM_BEDROOMS'])

print (df['NUM_BEDROOMS'].isnull())

 

import pandas as pd

df = pd.read_csv('property-data.csv')

df.dropna(subset=['ST_NUM'], inplace = True)

print(df.to_string())

 

import pandas as pd

df = pd.read_csv('property-data.csv')

df['PID'].fillna(12345, inplace = True)

print(df.to_string())

 

df = pd.DataFrame(data, index = ["day1", "day2", "day3"])

index指定行标签

df['Date'] = pd.to_datetime(df['Date']),尝试下

print(df.to_string())

 

 

 

4、  数据选择和切片

函数

说明

df[column_name]

选择指定的列;

df.loc[row_index, column_name]

通过标签选择数据;

df.iloc[row_index, column_index]

通过位置选择数据;

df.ix[row_index, column_name]

通过标签或位置选择数据;

df.filter(items=[column_name1, column_name2])

选择指定的列;

df.filter(regex='regex')

选择列名匹配正则表达式的列;

df.sample(n)

随机选择 n 行数据。

实例

# 选择指定的列

df['column_name']

 

# 通过标签选择数据

df.loc[row_index, column_name]

 

# 通过位置选择数据

df.iloc[row_index, column_index]

 

# 通过标签或位置选择数据

df.ix[row_index, column_name]

 

# 选择指定的列

df.filter(items=['column_name1', 'column_name2'])

 

# 选择列名匹配正则表达式的列

df.filter(regex='regex')

 

# 随机选择 n 行数据

df.sample(n=5)

 

5、  数据排序

函数

说明

df.sort_values(column_name)

按照指定列的值排序;

df.sort_values([column_name1, column_name2], ascending=[True, False])

按照多个列的值排序;

df.sort_index()

按照索引排序。

实例

# 按照指定列的值排序

df.sort_values('column_name')

 

# 按照多个列的值排序

df.sort_values(['column_name1', 'column_name2'], ascending=[True, False])

 

# 按照索引排序

df.sort_index()

 

6、  数据分组和聚合

函数

说明

df.groupby(column_name)

按照指定列进行分组;

df.aggregate(function_name)

对分组后的数据进行聚合操作;

df.pivot_table(values, index, columns, aggfunc)

生成透视表。

实例

# 按照指定列进行分组

df.groupby('column_name')

 

# 对分组后的数据进行聚合操作

df.aggregate('function_name')

 

# 生成透视表

df.pivot_table(values='value', index='index_column', columns='column_name', aggfunc='function_name')

 

7、  数据合并

函数

说明

pd.concat([df1, df2])

将多个数据框按照行或列进行合并;

pd.merge(df1, df2, on=column_name)

按照指定列将两个数据框进行合并。

实例

# 将多个数据框按照行或列进行合并

df = pd.concat([df1, df2])

 

# 按照指定列将两个数据框进行合并

df = pd.merge(df1, df2, on='column_name')

 

8、  数据选择和过滤

函数

说明

df.loc[row_indexer, column_indexer]

按标签选择行和列。

df.iloc[row_indexer, column_indexer]

按位置选择行和列。

df[df['column_name'] > value]

选择列中满足条件的行。

df.query('column_name > value')

使用字符串表达式选择列中满足条件的行。

 

9、  数据统计和描述

函数

说明

df.describe()

计算基本统计信息,如均值、标准差、最小值、最大值等。

df.mean()

计算每列的平均值。

df.median()

计算每列的中位数。

df.mode()

计算每列的众数。

df.count()

计算每列非缺失值的数量

 

10、  可视化操作

使用matplotlib、seaborn画图

 

 

 

三、  应用案例

寻找一个恰当的数据,来进行案例书写。

关注公众号「水沐教育科技」,在手机上阅读所有教程,随时随地都能学习。内含一款搜索神器,免费下载全网书籍和视频。

公众号二维码
微信扫码关注公众号

微信交流群 关注微信公众号,加入官方交流群。内含一款搜索神器,免费下载全网书籍和视频。