pandas是基于numpy的一种数据分析工具,熟练使用pandas可以大大降低我们的工作量
引入pandas包:
import numpy as np
import pandas as pd
pandas数据类型
pandas有两种数据类型:series和dataframe。
series是一种一维数据结构,每一个元素都有一个索引,与一维数组类似。索引可以使数字或者字符串,series结构如下:
dataframe则是二维数据结构,其存在于excel表格类似,有对应的行和列,其结构如下:
Series对象的创建
例1
#我们可以直接用Series函数来创建对象
import numpy as np
import pandas as pd
a=pd.Series([1,2,3,4,5])
print(a)
'''
输出为:
0 1
1 2
2 3
3 4
4 5
dtype: int64
#程序会自动生成index,从0开始编号
'''
例2
#当然也可以指定index,并且Series可以使用已有的列表、元素来创建对象,也可以利用ndarray来创建
import numpy as np
import pandas as pd
a=np.array([1,2,3,4,5,6])
b=pd.Series(a,index=['a','b','c','d','e','f'])
print(b)
'''
输出为:
a 1
b 2
c 3
d 4
e 5
f 6
dtype: int32
'''
例3
#Series也可以用来创建时间序列,但是必须指定start,end,period中最少两个值
import numpy as np
import pandas as pd
b=pd.date_range('20200101','20200106')
print(b)
'''
输出为:
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
'2020-01-05', '2020-01-06'],
dtype='datetime64[ns]', freq='D')
'''
DataFrame对象的创建
DataFrame有行名和列名,行列名我们都可以进行定义我个人理解的构造函数如下
pd.DataFrame(object,index=,columns=)
例1
import numpy as np
import pandas as pd
s=np.arange(1,7)
s=s.reshape(2,3)
a=pd.DataFrame(s,index=['a','b'],columns=['A','B','C'])
print(a)
'''
输出为:
A B C
a 1 2 3
b 4 5 6
'''
例2
#还可以通过字典来创建DataFrame对象,键值对应index
import numpy as np
import pandas as pd
a=pd.DataFrame({'name':pd.Categorical(['dn','muss']),
'age':pd.Categorical(['18','19']),
'score':pd.Categorical(['99','98'])})
print(a)
'''
输出为:
name age score
0 dn 18 99
1 muss 19 98
'''
DataFrame属性
查看数据类型
我们可以使用DataFrame.dtypes函数来查看每一列的数据类型
import numpy as np
import pandas as pd
a=pd.DataFrame({'name':pd.Categorical(['dn','muss']),
'age':18,
'score':pd.Series(np.arange(98,100))})
print(a.dtypes)
'''
输出为:
name category
age int64
score int32
dtype: object
'''
查看索引和列名
利用DataFrame.index函数来查看索引
import numpy as np
import pandas as pd
a=pd.DataFrame({'name':pd.Categorical(['dn','muss']),
'age':18,
'score':pd.Series(np.arange(98,100))})
print(a.index)
'''
输出为:RangeIndex(start=0, stop=2, step=1)
'''
利用DataFrame.columns函数来查看列名
import numpy as np
import pandas as pd
a=pd.DataFrame({'name':pd.Categorical(['dn','muss']),
'age':18,
'score':pd.Series(np.arange(98,100))})
print(a.columns)
#输出为Index(['name', 'age', 'score'], dtype='object')
查看数据和统计信息
利用DataFrame.values函数来查看数据
import numpy as np
import pandas as pd
a=pd.DataFrame({'name':pd.Categorical(['dn','muss']),
'age':18,
'score':pd.Series(np.arange(98,100))})
print(a.values)
'''
输出为:
[['dn' 18 98]
['muss' 18 99]]
'''
利用DataFrame.describe()函数查看统计信息
import numpy as np
import pandas as pd
a=pd.DataFrame({'name':pd.Categorical(['dn','muss']),
'age':18,
'score':pd.Series(np.arange(98,100))})
print(a.describe())
'''
输出为:
age score
count 2.0 2.000000
mean 18.0 98.500000
std 0.0 0.707107
min 18.0 98.000000
25% 18.0 98.250000
50% 18.0 98.500000
75% 18.0 98.750000
max 18.0 99.000000
Process finished with exit code 0
'''
DataFrame常用操作
转置
关于转置操作不用多说了,numpy部分已经说过了
import numpy as np
import pandas as pd
a=pd.DataFrame({'name':pd.Categorical(['dn','muss']),
'age':18,
'score':pd.Series(np.arange(98,100))})
print(a.T)
'''
输出为:
0 1
name dn muss
age 18 18
score 98 99
'''
排序
排序分为按照index排序和按值排序
按照index排序
import numpy as np
import pandas as pd
s=np.array([6,5,4,3,2,1]).reshape(3,2)
a=pd.DataFrame(s,index=[0,1,2],columns=['a','b'])
print(a.sort_index(axis=1))
'''
输出为:
a b
0 6 5
1 4 3
2 2 1
'''
按值排序
import numpy as np
import pandas as pd
s=np.array([6,5,4,3,2,1]).reshape(3,2)
a=pd.DataFrame(s,index=[0,1,2],columns=['a','b'])
print(a.sort_values(by='b'))
'''
输出为:
a b
2 2 1
1 4 3
0 6 5
'''
数据选择
选择列
这将会返回一个单独的列,相当于一个Series对象
import numpy as np
import pandas as pd
s=np.arange(1,7).reshape(3,2)
a=pd.DataFrame(s,index=[0,1,2],columns=['a','b'])
print(a['a'])
'''
输出为:
0 1
1 3
2 5
'''
选择行
一个道理
#这里我有点迷,直接用行索引会报错,只有使用切片才可以输出,假如想输出第一行就用0:1的方法。
import numpy as np
import pandas as pd
s=np.arange(1,7).reshape(3,2)
a=pd.DataFrame(s,index=[0,1,2],columns=['a','b'])
print(a[0:1])
'''
输出为:
a b
0 1 2
'''
标签选择loc
loc用来获得一个交叉的区域,比如我们想要第1,2行的第a,b列的数据:
import numpy as np
import pandas as pd
s=np.arange(1,7).reshape(3,2)
a=pd.DataFrame(s,index=[0,1,2],columns=['a','b'])
print(a)
print('.')
print(a.loc[[1,2],['a','b']])
'''
输出为:
a b
0 1 2
1 3 4
2 5 6
.
a b
1 3 4
2 5 6
'''
当然也可以用来获取单行单列的数据。
import numpy as np
import pandas as pd
s=np.arange(1,7).reshape(3,2)
a=pd.DataFrame(s,index=[0,1,2],columns=['a','b'])
print(a.loc[1])
'''
输出为:
a b
0 1 2
1 3 4
2 5 6
.
a 3
b 4
Name: 1, dtype: int32
'''
位置选择iloc
loc是通过标签来对行列进行选择,而iloc是通过行列的位置进行选择,比如说想要第二列,那列位置就写2(假设从1开始).
import numpy as np
import pandas as pd
s=np.arange(1,7).reshape(3,2)
a=pd.DataFrame(s,index=[0,1,2],columns=['a','b'])
print(a)
print('.')
print(a.iloc[[0,1],0:1])
'''
输出为
a b
0 1 2
1 3 4
2 5 6
.
a
0 1
1 3
'''
读取文件和导出操作
导入函数 | 导出函数功能 |
---|---|
read_csv | to_csv |
read_excel | to_excel |
read_sql | to_sql |
read_json | to_json |
read_msgpack | to_msgpack |
read_html | to_html |
read_gbq | to_gbq |
read_stata | to_stata |
read_sas | to_sas |
read_clipboard | to_clipboard |
read_pickle | to_pickle |
常用统计方法
函数 | 解释 |
---|---|
count | 非 NA 值的数量 |
describe | 针对 Series 或 DF 的列计算汇总统计 |
min , max | 最小值和最大值 |
argmin , argmax | 最小值和最大值的索引位置(整数) |
idxmin , idxmax | 最小值和最大值的索引值 |
quantile | 样本分位数(0 到 1) |
sum | 求和 |
mean | 均值 |
median | 中位数 |
mad | 根据均值计算平均绝对离差 |
var | 方差 |
std | 标准差 |
skew | 样本值的偏度(三阶矩) |
kurt | 样本值的峰度(四阶矩) |
cumsum | 样本值的累计和 |
cummin , cummax | 样本值的累计最大值和累计最小值 |
cumprod | 样本值的累计积 |
diff | 计算一阶差分(对时间序列很有用) |
pct_change | 计算百分数变化 |