pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
1、pandas怎样读取数据
数据类型 | 说明 | 读取方法 |
---|---|---|
csv 、tsv、txt | 用逗号分隔,tab分隔的纯文本文件 | pd.read_csv |
excel | 微软xls或者xlsx文件 | pd.read_excel |
mysql | 关系型数据库表 | pd.read_sql |
例:
import pandas as pd
df=pd.read_csv("./DataIncome.csv")
print(df.head()) #head方法是预览数据前五条
2、pandas数据结构
2.1 DataFrame 二维数据(理解为表)
2.2 Series(一维数据,理解为python中的列表)
3、怎样查询数据
3.1、df.loc
根据行、列标签值查询
例:选择所有行的name列
print(df.loc[:, "name"])
3.2、df.iloc
对数据进行位置索引,从而在数据表中提取出相应的数据。
df.iloc[a,b]
a是行索引,b是列索引
import pandas
df = pandas.read_csv('a.csv')
print(df.iloc[1,2])
输出:95
4、新增数据列
4.1 直接赋值
import pandas
df = pandas.read_csv('a.csv')
df['test']=0 #新增列名
4.2 insert()函数
insert()函数语法:
df.insert(loc, column, value,allow_duplicates = False)
参数说明:
- loc 必要字段,int类型数据,表示插入新列的列位置,原来在该位置的列将向右移。
- column 必要字段,插入新列的列名。
- value 必要字段,新列插入的值。如果仅提供一个值,将为所有行设置相同的值。可以是int,string,float等,甚至可以是series /值列表。
- allow_duplicates 布尔值,用于检查是否存在具有相同名称的列。默认为False,不允许与已有的列名重复。
5、统计函数
函数 | 含义 |
---|---|
min() | 计算最小值 |
max() | 计算最大值 |
sum() | 求和 |
mean() | 计算平均值 |
count() | 计数(统计非缺失元素的个数) |
size() | 计数(统计所有元素的个数) |
median() | 计算中位数 |
var() | 计算方差 |
std() | 计算标准差 |
quantile() | 计算任意分位数 |
cov() | 计算协方差 |
corr() | 计算相关系数 |
skew() | 计算偏度 |
kurt() | 计算峰度 |
mode() | 计算众数 |
describe() | 描述性统计(一次性返回多个统计结果) |
groupby() | 分组 |
aggregate() | 聚合运算(可以自定义统计函数) |
argmin() | 寻找最小值所在位置 |
argmax() | 寻找最大值所在位置 |
any() | 等价于逻辑“或” |
all() | 等价于逻辑“与” |
value_counts() | 频次统计 |
cumsum() | 运算累计和 |
cumprod() | 运算累计积 |
pct_change() | 运算比率(后一个元素与前一个元素的比率) |
6、判断空值(数据清洗)
6.1 判断pandas中单个空值对象的方式:
- 利用pd.isnull(),pd.isna()
- 利用np.isnan()
- 利用is表达式
- 利用in表达式
6.2 判断pandas中多个空值对象的方式:
- 可以用Series对象和DataFrame对象的any()或all()方法;
- 可以用numpy的any()或all()方法;
- 不可以直接用python的内置函数any()和all()方法;
- 可以用Series或DataFrame对象的dropna()方法剔除空值;
- 可以用Series或DataFrame对象的fillna()方法填充空值
6.3数据清洗常用函数
函数 | 含义 |
---|---|
duplicated() | 判断序列元素是否重复 |
drop_duplicates() | 删除重复值 |
hasnans() | 判断序列是否存在缺失(返回TRUE或FALSE) |
isnull() | 判断序列元素是否为缺失(返回与序列长度一样的bool值) |
notnull() | 判断序列元素是否不为缺失(返回与序列长度一样的bool值) |
dropna() | 删除缺失值 |
fillna() | 缺失值填充 |
ffill() | 前向后填充缺失值(使用缺失值的前一个元素填充) |
bfill() | 后向填充缺失值(使用缺失值的后一个元素填充) |
dtypes() | 检查数据类型 |
astype() | 类型强制转换 |
pd.to_datetime | 转日期时间型 |
factorize() | 因子化转换 |
sample() | 抽样 |
where() | 基于条件判断的值替换 |
replace() | 按值替换(不可使用正则) |
str.replace() | 按值替换(可使用正则) |
str.split.str() | 字符分隔 |
6.4数据筛选函数
函数 | 含义 |
---|---|
isin() | 成员关系判断 |
between() | 区间判断 |
loc() | 条件判断(可使用在数据框中) |
iloc() | 索引判断(可使用在数据框中) |
compress() | 条件判断 |
nlargest() | 搜寻最大的n个元素 |
nsmallest() | 搜寻最小的n个元素 |
str.findall() | 子串查询(可使用正则) |
7、数据排序
7.1DataFrame排序
函数:DataFrame.sort_values(by, ascending=True, inplace=False)
参数说明:
- by:字符串或者List<字符串>,单列排序或者多列排序。
- ascending:bool或者List,默认为True,如果为list,则会对多个列进行排序。
- inplace:是否修改原始DataFrame。
例如:df.sort_values(by="name")
7.2Series排序:
函数:Series.sort_values(ascending=True, inplace=False)
参数说明:
- ascending:默认为True升序排序,为False降序排序。
- inplace:是否修改原始Series。
例如:df["name"].sort_values(ascending=True)
8、时间序列函数
函数 | 含义 |
---|---|
dt.date() | 抽取出日期值 |
dt.time() | 抽取出时间(时分秒) |
dt.year() | 抽取出年 |
dt.mouth() | 抽取出月 |
dt.day() | 抽取出日 |
dt.hour() | 抽取出时 |
dt.minute() | 抽取出分钟 |
dt.second() | 抽取出秒 |
dt.quarter() | 抽取出季度 |
dt.weekday() | 抽取出星期几(返回数值型) |
dt.weekday_name() | 抽取出星期几(返回字符型) |
dt.week() | 抽取出年中的第几周 |
dt.dayofyear() | 抽取出年中的第几天 |
dt.daysinmonth() | 抽取出月对应的最大天数 |
dt.is_month_start() | 判断日期是否为当月的第一天 |
dt.is_month_end() | 判断日期是否为当月的最后一天 |
dt.is_quarter_start() | 判断日期是否为当季度的第一天 |
dt.is_quarter_end() | 判断日期是否为当季度的最后一天 |
dt.is_year_start() | 判断日期是否为当年的第一天 |
dt.is_year_end() | 判断日期是否为当年的最后一天 |
dt.is_leap_year() | 判断日期是否为闰年 |
9、绘图函数
函数 | 含义 |
---|---|
hist() | 绘制直方图 |
plot() | 可基于kind参数绘制更多图形(饼图,折线图,箱线图等) |
map() | 元素映射 |
apply() | 基于自定义函数的元素级操作 |
10、其他函数
函数 | 含义 |
---|---|
append() | 序列元素的追加(需指定其他序列) |
diff() | 一阶差分 |
round() | 元素的四舍五入 |
sort_values() | 按值排序 |
sort_index() | 按索引排序 |
to_dict() | 转为字典 |
tolist() | 转为列表 |
unique() | 元素排重 |