python的pandas模块
pandas是一个提供了数据操作和数据分析工具的模块。它支持两种主要数据结构:Series和DataFrame。
Series是一种类似于NumPy数组的对象,它由一组数据(任何NumPy数据类型)以及一组与之相关的数据标签(index)组成。
DataFrame则是一种二维表格类型数据结构,它可以容纳不同数据类型的列,包括数字,字符串和布尔值等。它类似于Excel或SQL表格。
在使用pandas时,我们通常需要进行的操作包括读取数据、数据清洗、数据分析和数据可视化等。
使用pandas可以大大提高数据处理的效率和准确性,特别是在数据预处理、建模和报表制作等方面。它是数据科学的核心之一,非常值得学习和掌握。
pands在日常数据处理中的使用方法总结了七大类,如果更详细的使用说明和更全面的函数说明可以浏览官网:https://pandas.pydata.org/
首先导入pandas包
import pandas as pd
一、创建
DataFrame的创建可以由多种方式创建,比如从列表、csv、excel、json等格式
- 自定义创建
import pandas as pd
import numpy as np
df_define = pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006],
"date":pd.date_range('20130102', periods=6),
"city":['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '],
"age":[23,44,54,32,34,32],
"category":['100-A','100-B','110-A','110-C','210-A','130-F'],
"price":[1200,np.nan,2133,5433,np.nan,4432]},
columns =['id','date','city','category','age','price'])
- 从csv文件导入
import pandas as pd
df = pd.DataFrame(pd.read_csv('csv_path.csv'))
- 从excel文件导入
import pandas as pd
df_excel = pd.DataFrame(pd.read_excel('excel_path.excel', index_col = None))
二、基础属性信息
- 查看全部数值
df_values = df.values
- 维度查询
df_shape = df.shape
- 基础信息
df_info = df.info
- 查看所有的行索引名
df_index = df.index
df_index_values = df.index.values
- 查看所有的列索引名
df_column = df.columns
df_columns_values = df.columns.values
- 每一列数据格式
df_dtypes = df.dtypes
- 指定列数据格式
df_only_dtypes = df['name'].dtypes
三、数值信息
- 查看指定列的数值
df_column_value = df['name'].values
- 查看指定行的数值
df_row_value = df.iloc[1].values
- 查看空值
df_isnull = df.isnull()
- 查看指定列的空值
df_column_isnull = df['name'].isnull
- 查看开头和结尾的数值
# 默认五行
df_head = df.head()
df_tail = df.tail()
- 按索引提取指定行的数据
df_loc_2 = df.loc[2]
- 按索引提取范围数据
df_iloc = df.iloc[0:3]
# 提取几行几列
df_iloc_column = df.iloc[:3,:2]
# 提取某行某列
df_iloc_com = df.iloc[[0,1,2],[0,1]]
print(df_iloc)
print(df_iloc_column)
print(df_iloc_com)
- 提取截止到某日的数据
# 设置索引
df_ix = df.set_index('dt')
df_ix_dt = df_ix[:'2023-01-03']
- 提取截止到某日的某几列数据
df_ix_column = df_ix.loc[df_ix.index > '2023-01-02',['name']]
四、数据过滤
- 过滤某属性大于n的行
df_filter_age = df[df.age > 10]
- 过滤某属性大于n的行,仅要name列
df_filter_only_age = df['name'][df.age > 10]
- 过滤列表中出现的值
fliter_list = ['tom','jery']
df_filter_list_value = df[df.name.isin(fliter_list)]
- 多条件过滤
# 过滤出name='tom'并且age=1
df_select_and = df.loc[(df['name'] == 'tom') & (df['age'] == 1),['name','age']]
# 过滤出name='tom'或者age>1的
df_select_or = df.loc[(df['name'] == 'tom') | (df['age'] > 1), ['name','age']]
- 排序
# 过滤name!='tom'后按照age排序
df_select_sort = df.loc[(df['name'] != 'tom'), ['name','age']].sort_values(['age'], ascending=False)
五、数据计算
- 计数
# 对name列计数
df_count = df.groupby('name').count()
- 求和
df_sum = df['age'].sum()
- 最大值
df_max = df['age'].max()
- 最小值
df_min = df['age'].min()
- 平均值
df_avg = df['age'].mean()
- 分组聚合
# 按照name分组,取age的count、mean、sum
df_agg = df.groupby('name').agg({'age':['count', 'mean', 'sum']})
print(df_max)
print(df_min)
print(df_avg)
print(df_agg)
'''
sum:求和
mean: 平均值
count:计数
std: 标准差
var: 方差
min: 最小值
max: 最大值
median: 中位数
quantile: 分位数
cov: 协方差
'''
六、数据分析
- 数据采样
# 简单采样
df_sample = df.sample(n=3)
# 设置权值
weights = [0.3,0.3,0.3,0.4]
df_sample_weight = df.sample(n=2, weights=weights)
# 放回采样
df_replace_true = df.sample(n=2, replace=True)
# 不放回采样
df_replace_false = df.sample(n=2, replace=False)
- 数据表统计
df_desc = df.describe().round(2).T
- 相关性分析
df_corr = df.corr()
# 两个字段的相关性分析
df_corr_column = df['age'].corr(df['age'])
七、数据输出
- 输出到csv
df.tocsv('path.csv')
- 输出到excel
df.to_excel('path.xlsx',sheet_name='sheet_name')
八、注意事项
- 避免直接修改原始数据:Pandas中的数据结构是可变的,如果直接修改原始数据,会影响到整个数据集。可以使用.copy()方法创建一个副本,防止修改原始数据。
- 处理缺失值:Pandas中的缺失值用NaN表示。在处理缺失值时,可以使用fillna()方法来填充缺失值,使用dropna()方法来删除缺失值。
- 索引和选择:Pandas中的索引和选择功能十分强大,但是需要注意的是,当使用.loc()方法时,包含了结尾的元素,并且使用整数索引时需要使用iloc()方法。
- 数据类型和格式:Pandas中的数据类型非常灵活,可以使用astype()方法转换数据类型。在读取和写入数据时,需要注意数据格式和类型,以避免不必要的错误。
- 性能和内存:Pandas中的一些操作可能会消耗很多内存,可以使用groupby()方法等一些高效的方式来处理数据。
- 规范化数据:在进行数据分析工作前,需要对数据进行规范化处理,例如处理重复值、异常值等。
- 可视化数据:Pandas中提供了强大的可视化功能,可以使用matplotlib或seaborn库来创建数据可视化图表。
- 处理日期和时间:Pandas中提供了一些实用的方法来处理日期和时间,例如pd.to_datetime()和pd.date_range()等方法。在处理时区和跨时区数据时,也需要注意时区设置。
九、补充说明
pandas中的loc和iloc都是用于选取数据的方法,但两者的使用方式、效果和用途有些不同。
- loc是基于标签位置进行选取的方法,iloc是基于整数位置进行选取的方法。
- loc使用的索引是基于数据的行和列的标签,通过指定行和列的标签来进行选取数据。
- iloc使用的索引是基于整数的位置,通过指定行和列的位置来进行选取数据。
- loc可以使用布尔索引进行数据的选取,而iloc不支持布尔索引。
- loc的选区时包含的是右侧和下方的所有值,而iloc选区时,不包含右侧和下方的最后一个值。
- loc只能使用行和列的标签,使用较为灵活,适合于选取标签比较明确的数据;iloc选区时是通过位置编号进行选取的,使用较为固定,适合于选取数据点比较明确的数据。
因此,在使用pandas进行数据选取时,需要根据数据的标签或位置来选择合适的方法。