1.一维数组创建Series(序列)
arr1 = np.arange(10)
s1 = pd.Series(arr1)

2.二维数组创建DataFrame(数据框)
arr2 = np.array(np.arange(12)).reshape(4,3)
#reshape调整arange使之成为一个4X3的矩阵
arr2

[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]

3.索引
s4 = pd.Series(np.array([1,1,2,3,5,8]))
s4.index = [‘a’,‘b’,‘c’,‘d’,‘e’,‘f’]
s4
a 1
b 1
c 2
d 3
e 5
f 8
dtype: int64

索引的特性——自动对齐。例如两个索引相似的Series或DataFrame做运算时可以自动对齐。

4.查询数据
XX.head()
XX.tail()
括号里没有数字则默认返回前/后5行。

查询指定:XX.loc[[0,2,4,5,7]]
查询指定:XX.[[‘Name’,‘Height’,‘Weight’]],若多个列则需两个中括号。
逻辑查询:student[(student[‘Sex’]==‘F’) & (student[‘Age’]>12)]
Age Height Name Sex Weight
1 13 56.5 Alice F 84.0
2 13 65.3 Barbara F 98.0
3 14 62.8 Carol F 102.5
7 15 62.5 Janet F 112.5
11 14 64.3 Judy F 90.0
13 15 66.5 Marry F 112.0

student[(student[‘Sex’]==‘F’) & (student[‘Age’]>12)][[‘Name’,‘Height’,‘Weight’]]
Name Height Weight
1 Alice 56.5 84.0
2 Barbara 65.3 98.0
3 Carol 62.8 102.5
7 Janet 62.5 112.5
11 Judy 64.3 90.0
13 Marry 66.5 112.0

5.decribe描述函数
np.random.seed(1234)
d1 = pd.Series(2*np.random.normal(size = 100)+3)
d2 = np.random.f(2,4,size = 100)
d3 = np.random.randint(1,100,size = 100)

d1.count() #非空元素计算
d1.min() #最小值
d1.max() #最大值
d1.idxmin() #最小值的位置,类似于R中的which.min函数
d1.idxmax() #最大值的位置,类似于R中的which.max函数
d1.quantile(0.1))#10%分位数
d1.sum() #求和
d1.mean() #均值
d1.median() #中位数
d1.mode() #众数
d1.var() #方差
d1.std() #标准差
d1.mad() #平均绝对偏差
d1.skew() #偏度
d1.kurt() #峰度
d1.describe() #一次性输出多个描述性统计指标
注:describe函数只能针对序列或数据框,一维数组不适用。

6.apply可以将统计函数应用到数据框的每一列

def stats(x): #先定义一个函数将常用的统计函数汇总在一起
return pd.Series([x.count(),x.min(),x.idxmin(),x.quantile(.25),x.median(),x.quantile(.75),
x.mean(),x.max(),x.idxmax(),x.mad(),x.var(),x.std(),x.skew(),x.kurt()],
index = [‘Count’,‘Min’,‘Whicn_Min’,‘Q1’,‘Median’,‘Q3’,‘Mean’,‘Max’,
‘Which_Max’,‘Mad’,‘Var’,‘Std’,‘Skew’,‘Kurt’])

df = pd.DataFrame(np.array([d1,d2,d3]).T,columns=[‘x1’,‘x2’,‘x3’])
df.apply(stats)
pandas数据处理基础

7.增删改查
增:
方法1:student3 = pd.concat([student,student2])#将studengt2中的数据增加到student中。

方法2:pd.DataFrame(student2, columns=[‘Age’,‘Height’,‘Name’,‘Sex’,‘Weight’,‘Score’])#增加新列

删:
删除表:del
删除指定行:student.drop([0,1,3,6])
删除制定列:student.drop([‘Height’,‘Weight’],axis=1**)**

改:
student3.loc[student3[‘Name’] == ‘LiuShunxiang’,‘Height’]**=**173

聚合:
student.groupby(‘Sex’).mean()

#按’Sex’分类
Age Height Weight
Sex
F 13.222222 60.588889 90.111111
M 13.400000 63.910000 108.950000

student.groupby([‘Sex’,‘Age’]).mean() #多个分组变量
student.drop(‘Age’,axis=1).groupby(‘Sex’).agg([np.mean,np.median]) #多个统计量

排序:
Data = pd.Series(np.array(np.random.randint(1,20,10)))

Data.sort_index() #按索引排序
Data.sort_values(ascending=False) #按值排序,并倒序

8.多个表合并
#新建一个表
dic2 = {…}
score = pd.DataFrame(dic2)

#将score与student合并
stu_score1 = pd.merge(student, score, on=‘Name’, how=‘left’)
#通过on=Name连接两个表
#通过how参数设置连接的方式,left为左连接;right为右连接;outer为外连接

9.缺失值处理
删除dropna():
s = stu_score2[‘Score’]
s.dropna()
#DataFrame中,dropna()会删除任何含有缺失值的行,即使那一行只有一个缺失值。

填补fillna():
1.用0填补:df.fillna(0) #df是一个DataFrame
2.前项填充:df.fillna(method=‘ffill’)
后项填充:df.fillna(method=‘bfill’)
3.常量填充:df.fillna({‘x1’:1,‘x2’:2,‘x3’:3})
4.中位数、均值:
x1_median=df[‘x1’].median()
x2_mean=df[‘x2’].mean()
x3_mean=df[‘x3’].mean()
df.fillna({‘x1’:x1_median,‘x2’:x2_mean,‘x3’:x3_mean})

10.数据透视表
pivot_table(data,values=None,
index=None,
columns=None,
aggfunc=‘mean’,
fill_value=None,
margins=False,
dropna=True,
margins_name=‘All’)
data:需要进行数据透视表操作的数据框
values:指定需要聚合的字段
index:指定某些原始变量作为行索引
columns:指定哪些离散的分组变量
aggfunc:指定相应的聚合函数
fill_value:使用一个常数替代缺失值,默认不替换
margins:是否进行行或列的汇总,默认不汇总
dropna:默认所有观测为缺失的列
margins_name:默认行汇总或列汇总的名称为’All’

例1:
一个分组变量(Sex),一个数值变量(Height)
pd.pivot_table(student, values=[‘Height’], columns=[‘Sex’])

pandas数据处理基础

例2:
两个分组变量(Sex,Age),两个数值变量(Height,Weight)
pd.pivot_table(student, values=[‘Height’,‘Weight’], columns=[‘Sex’,‘Age’]).unstack()
#unstack函数意味“非堆叠”。

pandas数据处理基础

11.多层索引
s = pd.Series(np.arange(1,10),index=[[“a”,“a”,“a”,“b”,“b”,“c”,“c”,“d”,“d”],[1,2,3,1,2,3,1,2,3]])
s.index

MultiIndex(levels=[[‘a’, ‘b’, ‘c’, ‘d’], [1, 2, 3]],
labels=[[0, 0, 0, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 2]])

例:pandas数据处理基础

相关文章: