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画图
三、 应用案例
寻找一个恰当的数据,来进行案例书写。
关注公众号「水沐教育科技」,在手机上阅读所有教程,随时随地都能学习。内含一款搜索神器,免费下载全网书籍和视频。

微信扫码关注公众号