更多内容关注个人博客:https://blog.focuspoints.cn
Pandas介绍
pandas可是说是numpy的升级版。
如果把numpy看作是一个list,那pandas就是一个dict
pandas安装
终端:sudo pip install pandas
CMD:pip install pandas
引入pandas搭配numpy使用
import pandas as pd
import numpy as np
pandas数据类型Series
s = pd.Series(data,index,dtype,name,copy,fastpath)
各个属性默认为None或False
s = pd.Series([1,3,4,np.nan,1])
print(s)
0 1.0
1 3.0
2 4.0
3 NaN
4 1.0
dtype: float64
- 自带index索引
这里的np.nan表示数据为空【无效值】
日期date_range类型
dates = pd.date_range('20181213',periods=6)
print(dates)
DatetimeIndex(['2018-12-13', '2018-12-14', '2018-12-15', '2018-12-16',
'2018-12-17', '2018-12-18'],
dtype='datetime64[ns]', freq='D')
DataFrame类型【画个重点】
dates = pd.date_range('20181213',periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D'])
print(df)
A B C D
2018-12-13 0 1 2 3
2018-12-14 4 5 6 7
2018-12-15 8 9 10 11
2018-12-16 12 13 14 15
2018-12-17 16 17 18 19
2018-12-18 20 21 22 23
如果不给index和columns值
dates = pd.date_range('20181213',periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)))
print(df)
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
4 16 17 18 19
5 20 21 22 23
它会从0开始默认生成
- 以一个字典形式生成DataFrame()
dates = pd.date_range('20181213',periods=6)
df = pd.DataFrame({
'01':101.,
'02':pd.date_range('20181213',periods=6),
'03':np.array([3]*6,dtype='int32'),
'04':'str'
})
print(df)
01 02 03 04
0 101.0 2018-12-13 3 str
1 101.0 2018-12-14 3 str
2 101.0 2018-12-15 3 str
3 101.0 2018-12-16 3 str
4 101.0 2018-12-17 3 str
5 101.0 2018-12-18 3 str
· 注意:当其中一个键的值只有一个时,它会自动补齐最高的,但是如果键有两个及两个以上的值且两个键长度不统一就会报错
arrays must all be same length
- 查看这个DataFrame()全部列的数据类型
dates = pd.date_range('20181213',periods=6)
df = pd.DataFrame({
'01':101.,
'02':pd.date_range('20181213',periods=6),
'03':np.array([3]*6,dtype='int32'),
'04':'str'
})
print(df.dtypes)
01 float64
02 datetime64[ns]
03 int32
04 object
dtype: object
- 查看这个DataFrame()全部行的序号
dates = pd.date_range('20181213',periods=6)
df = pd.DataFrame({
'01':101.,
'02':pd.date_range('20181213',periods=6),
'03':np.array([3]*6,dtype='int32'),
'04':'str'
})
print(df.index)
RangeIndex(start=0, stop=6, step=1)
- 转置操作:相当于翻转矩阵,旋转90°
dates = pd.date_range('20181213',periods=6)
print(dates.T)
DatetimeIndex(['2018-12-13', '2018-12-14', '2018-12-15', '2018-12-16',
'2018-12-17', '2018-12-18'],
dtype='datetime64[ns]', freq='D')
pandas设置值
- 用.iloc[]和loc[]来定位值的位置 [可以按行输入并打印查看效果]
dates = pd.date_range('20181213',periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D'])
df.iloc[2,2] = 111
df.loc['20181213','B'] = 222
df[df.A>0] = 0 #df.A中所有大于0的数全部改为 0
df['F'] = np.nan
print(df)
处理丢失、无效数据
- 丢掉数据
- 替换数据
- 判断是否缺失值
丢掉数据
dates = pd.date_range('20181213',periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])
df.iloc[0,1] = np.nan
df.iloc[1,2] = np.nan
print(df)
A B C D
2018-12-13 0 NaN 2.0 3
2018-12-14 4 5.0 NaN 7
2018-12-15 8 9.0 10.0 11
2018-12-16 12 13.0 14.0 15
2018-12-17 16 17.0 18.0 19
2018-12-18 20 21.0 22.0 23
print(df.dropna(axis=0,how='any')) #丢失含有无效项的行 how={'any':'all'}
# how为any时,只要行中有无效项就丢失整行。相反all时,要一行所有的项都为无效值则丢失整行。
填充数据
print(df.fillna(value=0))
A B C D
2018-12-13 0 0.0 2.0 3
2018-12-14 4 5.0 0.0 7
2018-12-15 8 9.0 10.0 11
2018-12-16 12 13.0 14.0 15
2018-12-17 16 17.0 18.0 19
2018-12-18 20 21.0 22.0 23
判断是否缺失值
print(df.isnull()) #缺失为True
print(np.any(df.isnull()) == True) #当数据量大无法观察到True或False时使用,会返回True或False告诉你数据中是否还存在丢失值。
A B C D
2018-12-13 False True False False
2018-12-14 False False True False
2018-12-15 False False False False
2018-12-16 False False False False
2018-12-17 False False False False
2018-12-18 False False False False
True
Pandas导入导出数据
pandas可以读取与存取的资料格式有很多种,像csv、excel、json、html与pickle等,点这里查看官方说明文件。
本文引用文件下载:student.csv
- 导入读取csv
import pandas as pd
import numpy as np
data = pd.read_csv('student.csv')# 其他参数可以参照官方说明文档来决定,使用哪些参数。
print(data)
id name age grade
0 1001 Bob 21 B
1 1002 Linda 22 A
2 1003 Xiaoming 25 D
3 1004 David 23 E
4 1005 Coco 24 C
5 1006 M 19 C
6 1007 N 20 A
7 1008 O 22 D
8 1009 S 23 B
9 1010 Kelly 31 S
10 1011 Kitty 21 A
11 1012 Tom 23 C
12 1013 Tonny 22 D
13 1014 W 21 E
pandas会默认给你在第一行后添加索引。
- 导出写入csv
data.to_pickle('student.pickle')