@pandas
pandas自学笔记01
一、基本介绍
1.安装pandas
pip install pandas
2.numpy与pandas
numpy
- 序列化的矩阵或者序列
- 列表(得到矩阵的行列信息)
pandas
- 字典型的numpy
- 字典(因为可以给不同的行和列命名)
3.基本操作
(1) 导入模块
一般情况下numpy与pandas 都是搭配使用的
import pandas as pd
import numpy as np
(2) 创建pandas的序列pd.Series
创建一组带行索引的数据
pd.Series([1,3,5,np.nan,6,2]) #np.nan 表示空值
结果:
(3) DataFrame创建
- 准备工作:时间行索引(不给则为默认的0,1,2,…)
pd.date_range('20200202',periods=8) # 得到从20200202开始的periods个日期
结果:
- 定义了行和列的DataFrame
pd.DataFrame(np.random.randn(8,4),index=dates,columns=["a","b","c","d"])
结果:
- 未定义行和列的DataFrame
pd.DataFrame(np.arange(12).reshape((3,4)))
结果:
- 用字典的方法创建DataFrame(其中键为列名,值为DataFrame的值)
pd.DataFrame({"A":1.,
"B":pd.Timestamp("20200202"),
"C":pd.Series(1,index=list(range(4)),dtype='float32'),
"D":np.array([3]*4,dtype='int32'),
"E":pd.Categorical(["test","train","test","train"]),
"F":"qh"})
结果:
(4) 判断数据类型
df = pd.DataFrame({"A":1.,
"B":pd.Timestamp("20200202"),
"C":pd.Series(1,index=list(range(4)),dtype='float32'),
"D":np.array([3]*4,dtype='int32'),
"E":pd.Categorical(["test","train","test","train"]),
"F":"qh"})
df.dtypes #返回每一列的数据类型
结果:
(5) 取值
① 取行索引
df.index # 取行索引
结果:
Int64Index([0, 1, 2, 3], dtype=‘int64’)
② 取列索引
df.columns # 取列索引
结果:
Index([‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’], dtype=‘object’)
③ 取值
df.values # 取每一行的值
结果:
(6) 描述DataFrame—df.describe()
对DataFrame中所有的数值型类型的数据算其数量、均值、方差、最大值、最小值等基本信息
df.describe() # 对DataFrame中所有的数值型类型的数据算其数量、均值、方差、最大值、最小值等基本信息
结果:
(7) 取转置
df.T
结果:
(8) 排序
① 按列名排序
df.sort_index(axis=1,ascending=False)
结果:
② 按行名排序
df.sort_index(axis=0,ascending=False)
结果:
③ 按某列的值排序
df.sort_values(by="E")
结果:
二、选择数据
1.创建一个DataFrame
import pandas as pd
import numpy as np
dates = pd.date_range("20200202",periods=6)
print(dates)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=["A","B","C","D"])
df
结果:
2.按列名选择数据
# 此两者等效
df["A"]
df.A
结果:
3.按行名选择数据
(1)按行索引切片
df[0:3]
结果:
(2)按行名切片
df["20200202":"20200204"]
结果:
4.根据标签label:.loc选择数据
- 按行标签
df.loc["20200202"]
结果:
- 按列标签
df.loc[:,["A","C"]]
结果:
- 行和列标签
df.loc["20200202",["A","C"]]
结果:
5.根据位置position:.iloc选择数据
df.iloc[3] #取第3行
结果:
df.iloc[3,1] #取第3行的第1列
结果:
df.iloc[3:5,1:3] # 取第3-5行的第1-3列
结果:
df.iloc[[1,3,5],1:3] # 取第1,3,5行的1-3列
结果:
6.根据标签和位置选择数据.ix
df.ix[:3,["A","C"]]
结果:
注意:1
- 使用 .loc 从索引中选择适当的索引,然后使用标签索引
df.loc[df.index[[0,3]],["A","C"]]
结果:
- 用 .iloc,显式地获取索引器上的位置,并使用位置索引来选择事物
df.iloc[[0,2],df.columns.get_loc("A")]
结果:
- 为了得到倍数索引器,使用 .get_indexer
df.iloc[[0,2],df.columns.get_indexer(["A","C"])]
结果:
7.bool类型选择数据
df[df.A>8]
结果:
pandas从0.20.0版本开始,一般不支持 .ix索引器,提倡使用 .iloc和 .loc索引器。更多详细内容见一下链接:http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#ix-indexer-is-deprecated ↩︎