pandas集合了numpy与matplotlib,在数据处理能力上更具有便捷性,读取数据文件较方便。
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)
用于存储一行或一列的数据,以及相关的索引集合。
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
data.loc["2019-12-14", "good3"]
# 包含第二行的第一个元素到第三个元素
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')
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)