文章目录
Pandas
一、介绍
pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
二、Series的使用(pandas一维数组)
一维数组创建Series
arr = np.array([1,2,4.4])
#传入numpy数组
series01= pd.Series(arr)
#改下标值
series01.index = ['a','b','c']
print(series01)
print("-"*20)
series03 = pd.Series([1,2,3,4],index = ['a','b','c','d'])
print(series03)
print("-"*20)
字典方式创建Series
a_dict= {'2017':5,'34':545}
#传入字典,
series02 = pd.Series(a_dict)
print(series02)
Series的取值、筛选、运算
#取值,如同数组
print(series02['2017'])
print("-"*20)
#根据条件筛选series值
a = series02[series02>100]
print(a)
print("-"*20)
#运算同numpy运算
print(series02/10)
Series应用NumPy数组运算
#求e的幂函数
series01 = pd.Series([1,2,3,4])
np.exp(series01)
Series缺失值的检测
scores = pd.Series({"Tom":89,"John":88,"Zone":34})
print(scores)
print("-"*20)
new_index = ["John","Tom","ML","Zone"]
#对比字典的值是否缺失,传入一个标准索引序列
scores = pd.Series(scores,index=new_index)
print(scores)
Series自动对齐运算
#不同的Series运算根据索引自动对齐,做运算
p= pd.Series([1,2,3,4],index=['a','b','c','d'])
d= pd.Series([1,2,3,4],index=['a','c','b','d'])
p_sum = p * d
print(p_sum)
Series索引的name属性
#Series对象本身及索引有name属性
p.name = "ProductNum"
p.index.name = "productType"
p
Series索引对象
#Series索引
print(series03)
print("-"*20)
#根据下标字符串选取内容
print(series03['b':'c'])
三、DataFrame(二维数组)
二维数组创建DataFarme
#DataFrame 相当于一个表,二维数组
#方式一
df01 = pd.DataFrame([['Tom','Mark','John'],[76,98,100]])
#方式二
df01 = pd.DataFrame([['Tom',76],['Mark',98],['John',100]])
df01
numpy 转化为 DataFrame数据
arr = np.array([['Tom',76],['Mark',98],['John',100]])
print(arr)
print("-"*20)
df03 = pd.DataFrame(arr,columns=['name','score'])
print(df03)
字典方式创建DataFrame
data = {"apart":['1002',"1001","1003"],
"profits":[257,43,34],
"year":[34,324,4]}
df = pd.DataFrame(data)
print(df)
print(df.columns)
- List item
print(df.index)
print("-"*20)
#添加下标名称
df.index=['one','two','three']
print(df)
DataFrame索引对象
#DataFrame索引
print()
#按列选择
print(df['year'])
print("-"*20)
#选取第几行的
print(df01.loc[0])
print("-"*20)
print(df.loc["one"])
添加一列空元素
#添加一列,设置为空
df['pdn'] = np.NaN
df
常用数学的统计方法
方法 | 说明 |
---|---|
count | 非NA值的数量 |
describe方法 | 针对Series或各DataFrame列计算总统计 |
min/max | 计算最小值、最大值 |
argmin、argmax | 计算能够获取到最小值和最大值的索 引位置(整数) |
idxmin、idxmax | 计算最小值、最大值 |
quantile | 计算样本的分位数(0到1) |
sum | 值的总和 mean 值的平均数 |
median | 值的算术中位数(50%分位数) |
mad | 根据平均值计算平均绝对离差 |
var | 样本数值的方差 |
std | 样本值的标准差 |
cumsum | 样本值的累计和 |
cummin、cummax | 样本值的累计最小值、最大值 |
cumprod | 样本值的累计积 |
Pct_change | 计算百分数变化 |
df.describe()
相关系数与协方差
链接: 概念理解.
df = pd.DataFrame({"GDP":[12,23,45,78,56],'air_temperature':[23,25,26,27,30]},index=['2010','2002','2003','2004','2005'])
print(df)
print("-"*20)
#相关系数
print(df.corr())
print("-"*20)
#协方差
print(df.cov())
print("-"*20)
#单个协方差与相关系数,与其他的关系
print(df['GDP'].cov(df['air_temperature']))
print("-"*20)
print(df['GDP'].corr(df['air_temperature']))
print("-"*20)
#多个因素与单个因素的相关系数
series= pd.Series([13,13.3,13.5,13.6,13.7],index=['2001','2002','2003','2004','2005'])
df.corrwith(series)
唯一值与值计数以及成员资格
ser = pd.Series(['a','b','c','a','c','e'])
df = pd.DataFrame({'orderId':['1001','1002','1003','1004'],'memberId':['a1001','b1002','a1001','a1001']})
#唯一值
print(ser.unique())
print(df['memberId'].unique())
print("-"*20)
#统计元素出现的个数
print(ser.value_counts(ascending =False))
print("-"*20)
#成员资格,是否包含b,c,并确定位置
mask = ser.isin(['b','c'])
print(mask)
ser[mask]
处理缺失数据
df = pd.DataFrame([['Tom',np.nan,45.1,'M'],[np.nan,np.nan,np.nan],['Merry',3.4,15,np.NaN],['John',23,np.NaN,'M'],
['Joe',18,34.5,'F']],columns=['name','age','salary','gender'])
print(df)
#判断是否为空
df.isnull()
df.notnull()
print("-"*20)
series = pd.Series([1,2,3,4,np.NaN,5])
#删除空元素
print(series.dropna())
print("-"*20)
print(df.dropna())#有空的值都删除
print("-"*20)
print(df.dropna(how='all'))#删除所有空的值
#填充缺失元素
df.fillna(0)
DataFrame层次化
df = pd.DataFrame({'year':['2001','2001','2002','2002','2003'],
'fruit':['apple','banan','apple','banana','apple'],
'profits':[1,2,3,45,5]
})
print(df)
new_df = df.set_index(['year','fruit'])#依次设置层次化的排列
new_df.index