python数据挖掘03——Pandas

pandas集合了numpy与matplotlib,在数据处理能力上更具有便捷性,读取数据文件较方便。


DataFrame:

pandas中的结构,可以看作带有行索引和列索引的二维表结构。

行对应index,列对应columns。

import pandas as pd
import numpy as np

stock_change = np.random.normal(0,1,size=(10,5))
# 创建名称索引
names = ["stock{}".format(i) for i in range(10)]
# 创建日期索引
dates = pd.date_range("20191211", periods=5)

pd.DataFrame(stock_change, index=names, columns=dates)

1、查看表头尾元素:

# 默认显示前5行,也可以在括号内指定
data.head()
data.tail(2)

2、索引设定:

DataFrame只支持对整列的索引进行修改。

# 重置索引,drop默认为false,保留原索引
data.reset_index(drop=True)
# 以某列值为新的索引,可以指定多列为新的索引(Multindex)
# drop默认为True,舍弃原有列的元素值
data.set_index("price", drop=False)

3、multindex:

用于表示三维数据。

# 设置data的两个属性为表索引
data.set_index(['name', 'price'])
# 查看level的名称
data.index.names
# 查看level的元素值
data.index.levels

4、删除指定列:

# 按照1轴上的索引删除指定列
data.drop(['good1', 'good2'], axis=1)

 


Series:

用于存储一行或一列的数据,以及相关的索引集合。

DataFrame是Series的容器。

# 创建Series
data = {"a":1.,"b":2,"c":3,"d":4}
res = pd.Series(data,index=["d","c","b","a"])
# 通过索引值访问元素
data["a"]

1、索引访问:

对于一个数据表DataFrame,我们通常按照先行后列的方式进行数据的访问。

a = np.random.randint(1,10,size=(8,5))
names = ["good{}".format(i) for i in range(5)]
shops = pd.date_range("2019/12/11", periods=8)
data = pd.DataFrame(a, index=shops, columns=names)

# 访问第二行的index的全部元素
data.iloc[1,:]
#good0    4
good1    9
good2    2
good3    2
good4    1
Name: 2019-12-12 00:00:00, dtype: int32
  • loc:按照行列的名称进行索引访问:
data.loc["2019-12-14", "good3"]
  • iloc:按照下标序号进行索引访问:
# 包含第二行的第一个元素到第三个元素
data.iloc[1,:3]

2、排序:

可以对内容进行排序也可以对索引进行排序。

# 对DataFrame进行排序,ascending默认为True,为升序
data.sort_values("good2", ascending="True")

# 对Series按照值进行排序
s = data.iloc[1,:3]
s.sort_values()

# 可以以DataFrame的两个属性为基准进行排序
data.sort_values(["good1","good2"])

#对索引进行排序
data.sort_index(ascending=False)

3、条件查找:

# 逻辑表达式的方式
data[(data['good0'] > 3)&(data['good3']>5)]

# 条件查找
data.query('good0 > 3 & good3 > 5')

# 查找值是否在范围内
data['good4'].isin([3,5])

统计运算:

1、describe():

显示统计数值,包含一系列统计信息,既可以对DataFrame使用也可以对Serise使用。

2、统计函数:

# 如max,min,std等,默认按照列的元素求最值,也可以指定轴去求
data.max(axis=1)

# 最值所在位置,在numpy中使用argmax,在pandas中使用idxmax
data.idxmax()

# 累计统计函数
data['good0'].cumsum() # 累加
data['good0'].cummax() # 累计最值

3、自定义运算:

# 自定义运算用lambda表达式来定义
data.apply(lambda x: x.max() - x.min())

绘图:

pandas自身也包含绘图功能。

# kind指定绘图的类型,指定x,y的坐标
data.plot(x='', y='', kind='line')

CSV操作:

1、读取:

# 读取csv文件,指定读取列
pd.read_csv('/path', usecols=['good0', 'good1'])

# 指定列名字段
pd.read_csv('/path', names=['good0', 'good1'])

2、写入:

有时当我们把带索引的数据存到csv文件中时,索引列会变成单独的一列数据,可以设置index删除原行索引,也可以set_index

# 存储文件用to_csv()
data[:10].to_csv('/path', columbs=[], index=false)

# 设置mode值为a可以选择是否追加数据
data[:10].to_csv('/path', columbs=[], index=false, mode='a')

# 追加数据时,连续写入也会将columbs的列索引添加,将header属性设置为False即可
data[:10].to_csv('/path', columbs=[], index=false, mode='a', header=False)

缺失值处理:

缺失值的处理通常有两种方式,删除替换

numpy中对缺失值的处理过于繁琐,在pandas中处理的方式较为简单。

 1、替换nan:

# 判断DataFrame数据是否含空,返回布尔值
pd.isnull(df)

# 判断DataFrame数据是否不含空布尔值
pd.notnull(df)

# 删除具有缺失值的行样本数据,inplace来标识修改是否覆盖源数据
df.dropna(inplace=False)

# 替换缺失值
df.fillna(value, inplace=)

2、替换非nan字符:

思路,先将非nan字符替换成nan,再对缺失值做处理。

# 填写缺失值需要引入numpy包
df_new = df.replace(to_replace='?', value=np.nan)

数据离散化:

 

你可能感兴趣的:(机器学习)