- Pandas 总结
- 基本数据类型
- 介绍
- Series
- 构造方法:
- Series的切片操作
- Series 数学运算
- Dataframe
- 构造方法:
- Dataframe 中的行列操作
- 访问某一行
- df.loc[index_name]
- df.iloc[index]
- 访问某一列
- df[column_name]
- 访问多行
- df.loc[ : ] or df.loc[ [ ] ]
- df.iloc[ : ] or df.iloc[ [ ] ]
- 访问多列
- df[ : ]
- Dataframe常用的属性或方法
- 属性
- `df.T`
- `df.axes`
- `df.dtypes`
- `df.empty`
- `df.ndim`
- `df.shape`
- `df.size`
- `df.values`
- 方法
- `df.head()`
- `df.tail()`
- 利用Pandas进行数据分析
- 读入数据
- `data = pd.read_filetype(file_path)`
- 基本信息
- `data.info()`
- `data.describe()`
- `data.head(n = 5)`
- `data.tail(n = 5)`
- 数据分析
- 分组
- `data.groupby(by = )`
- 使用
- `se.value_counts()`
- 排序
- 按标签排序 `df.sort_index(axis = 1,ascending = True)`
- 按实际值排序 `df.sort_values(by = [], ascending = True)`
- 字符串文本函数 `series.str.function()`
- 统计函数
- 差分函数`series.pct_change()`
- 协方差函数`series.cov()`
- 相关性函数`series.corr()`
- 数据排名`series.rank()`
- 数据访问
- 迭代访问
- `df.iteritems()` 类似字典
- `df.iterrows()`
- `df.itertuples()`
- 索引 和 选择数据函数
- `df.iloc()`
- `df.loc()`
- `df.ix()`
- `df.column_name`
import pandas as pd
基本数据类型 介绍与 ndarray 数据类型不同,这两种数据类型都是可变的
- Series:带标签的一维数组,标签名是 index
- Dataframe:带标签且大小可变的二维表格结构
pd.Series(
data=None,
index=None,
dtype=None,
name=None,
copy=False,
fastpath=False,
)
-
data:列数据
-
数据可以是任意数据类型
-
字典作为参数,字典键作为index,值作为填充的列数据;若指名index,则会按照index中字典键的顺序去填充;若对应数据没有该键,则用NaN 填充。
# 例1 data = {'a':1, 'b':2, 'c':3} pd.Series(data) # out ''' a 1 b 2 c 3 dtype: int64 '''# 例2 按照字典键的顺序去填充 data = {'a':1, 'b':2, 'c':3} pd.Series(data, index = ['a', 'c', 'c']) # out ''' a 1 c 3 c 3 dtype: int64 '''
-
-
index:行索引(Dataframe中的是columns列索引),default = np.arange(n)
-
dtype:数据类型
-
name:Series 的名字,有了名字的Series作为Dataframe的参数的时候,列名就是它的名字
se = pd.Series(data = [1, 2, 3], index = range(3),name = 'number')#, df = pd.Dataframe(se) df.columns #out :Index(['number'], dtype='object')
-
注意:
- Series 是 一列数据
-
可以像ndarray类型的数据一样去切片
-
Examples:
-
中括号 里面参数是 index 或者 索引
s = pd.Series([0, 1, 2, 3, 4, 5], index = ['a', 'b', 'c', 'd', 'e', 'f']) print(s) s[0] s['a'] ''' out: a 0 b 1 c 2 d 3 e 4 f 5 dtype: int64 0 0 ''' -
参数是切片
-
可以用index值切片
s['a':'e'] ''' out: a 0 b 1 c 2 d 3 e 4 dtype: int64 ''' -
也可以用索引切片
s[0:5] ''' out: a 0 b 1 c 2 d 3 e 4 dtype: int64 ''' -
多值索引,列表里边嵌套列表
# In pos = [0,1,2] s[pos] # Out ''' a 0 b 1 c 2 dtype: int64 '''
-
-
Series 中可以使用numpy的几乎所有函数
-
obj.function()
s.mean() s.std() s.unique() # 返回值唯一数,并且拼接成新的数组 s.sum()
-
多个Series的相加操作,有所不同:对应index 相加,不匹配用NaN 填充
Series由于存在行标签,所以会根据两个运算书的标签自动对齐后进行计算。
s = pd.Series([0, 1, 2, 3, 4, 5], index = ['a', 'b', 'c', 'd', 'e', 'f']) s[1:] + s[:-1] ''' out: a NaN b 2.0 c 4.0 d 6.0 e 8.0 f NaN dtype: float64 ''' -
s.value_count()可以实现在某列中按值的类别记录个数(一列数据)
pd.Dataframe(
data=None,
index: 'Optional[Axes]' = None,
columns: 'Optional[Axes]' = None,
dtype: 'Optional[Dtype]' = None,
copy: 'bool' = False,
)
-
data:可以使用各种数据进行创建
-
二维数组(列表,ndarray)
data = np.array([[1, 2], [3, 4]]) pd.Dataframe(data) ''' out: 0 1 0 1 2 1 3 4 ''' -
字典 Key 始终是作为 columns
-
from 行
d = {'a':1,'b':1,'c':1} f = {'a':1,'b':1,'d':1} df = pd.Dataframe(data = [d, f]) #用列表拼起来 df ''' out: a b c d 0 1 1 1.0 NaN 1 1 1 NaN 1.0 ''' -
from 列
d = {'one':pd.Series([1, 2, 3], index=['a', 'b', 'c']), 'two':pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])} df = pd.Dataframe(d) df ''' out: one two a 1.0 1 b 2.0 2 c 3.0 3 d NaN 4 '''
-
-
注意:都不是方法,而是一种访问方式 []
访问某一行 df.loc[index_name]- [] 里面是index名称,或者index列表(获取多个)
- 可以名称切片
- index 索引
- 可以索引切片
- 可以使用列名,或者列名列表,但是不能用 列名 切片
- 可以用列的索引切片
-
返回 Dataframe 类型的数据
-
txt 文件 用 pd.read_csv读取
- 查看数据类型,列名,行列数,非空值统计
- 数值类型的数据数学信息
- count
- mean
- std
- min,max
- 四个分位点
- 查看数据的前几行信息,默认五行
- 查看数据的前几行信息,默认五行
data.groupby(
by=None,
axis=0,
level=None,
as_index: 'bool' = True,
sort: 'bool' = True,
group_keys: 'bool' = True,
squeeze: 'bool' =
key_parameters:
- by = :
- = function:每个index值 会被函数调用
- = ndarray
- = list
- = dict
- axis = :按照 0 (列),1(行)来进行划分
- 0
- 1
- dropna = :If True, and if group keys contain NA values, NA values together
with row/column will be dropped.
返回的是一个**‘DataframeGroupBy’** 的对象
-
对象.数学方法
- sum()
- count() dtype = ‘int’
- mean()
- std()
-
对象.画图方法
-
数据透视表:选择groupby选出的 部分列 作为 横纵坐标画图
(x, y, z)
groupby_df.pivot_table( values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, ) -> 'Dataframe'- values:column_name,选某一列的值作为 z
- index:column_name,x
- columns:column_nma,y
- aggfunc:对 values 进行对应的数据处理
-
普通图
-
groupby_df.plot(x,y,kind = '',title,xticks,yticks,xlim,ylim,xlabel,ylabel)
kind = :可以指名 画图类型,bar,line等等
-
groupby_df.plot.scatter()
-
groupby_df.plot.bar()
-
-
- 可以实现在某列中按值的类别记录个数,对于当前问题实现过程相对更简单
- 对数据按照 Dataframe 中的 index 进行排序
- axis
- = 1 行
- = 0 列
- ascending:
- = True : 升序
- = False :降序
- by
- = [columns1, columns2,…]:按照给定的列先后进行分组
- ascending
- = True 升序
- = False 降序
N = 5
df = pd.Dataframe({'X':np.linspace(0, stop = N-1, num = N),
'Y':np.random.rand(N),
'C':np.random.choice(['Low','Medium','High'],N).tolist()})
df
迭代访问
dir(df) 其中一部分 'items', 'iteritems', 'iterrows', 'itertuples',df.iteritems() 类似字典
for key ,value in df.iteritems():
print(key ,value)
- key
- value
for row_index, row in df.iterrows():
print(row_index ,row)
df.itertuples()
for row in df.itertuples():
print(row)
索引 和 选择数据函数
df.iloc()
df.loc()
df.ix()
df.column_name


