Pandas中一共有三种数据结构, 分别为: Series、 DataFrame和MultiIndex(老版本中叫Panel ) 。
其中Series是一维数据结构, DataFrame是二维的表格型数据结构, MultiIndex是三维的数据结构。
Series是一个类似于一维数组的数据结构, 它能够保存任何类型的数据, 比如整数、 字符串、 浮点数等, 主要由一组数据和与之相关的索引两
部分构成。
# 导入pandas
import pandas as pd
pd.Series(data=None, index=None, dtype=None)
参数:
data: 传入的数据, 可以是ndarray、 list等
index: 索引, 必须是唯一的, 且与数据的长度相等。 如果没有传入索引参数, 则默认会自动创建一个从0-N的整数索引。
dtype: 数据的类型
为了更方便地操作Series对象中的索引和数据, Series中提供了两个属性index和values
DataFrame是一个类似于二维数组或表格(如excel)的对象, 既有行索引, 又有列索引
# 导入pandas
import pandas as pd
pd.DataFrame(data=None, index=None, columns=None)
参数:
index: 行标签。 如果没有传入索引参数, 则默认会自动创建一个从0-N的整数索引。
columns: 列标签。 如果没有传入索引参数, 则默认会自动创建一个从0-N的整数索引。
reset_index(drop=False)
设置新的下标索引
drop:默认为False, 不删除原来索引, 如果为True,删除原来的索引值
MultiIndex是三维的数据结构;
多级索引(也称层次化索引) 是pandas的重要功能, 可以在Series、 DataFrame对象上拥有2个以及2个以上的索引。
class pandas.Panel (data=None, items=None, major_axis=None, minor_axis=None)
作用: 存储3维数组的Panel结构
参数:
data : ndarray或者dataframe
items : 索引或类似数组的对象, axis=0
major_axis : 索引或类似数组的对象, axis=1
minor_axis : 索引或类似数组的对象, axis=2
# 读取文件
data = pd.read_csv("./data/stock_day.csv")
# 删除一些列, 让数据更简单些, 再去做后面的操作
data = data.drop(["ma5","ma10","ma20","v_ma5","v_ma10","v_ma20"], axis=1)
排序有两种形式, 一种对于索引进行排序, 一种对于内容进行排序
我们的数据大部分存在于文件当中, 所以pandas会支持复杂的IO操作, pandas的API支持众多的文件格式, 如CSV、 SQL、 XLS、 JSON、
HDF5。
pandas.read_csv(filepath_or_buffer, sep =‘,’, usecols )
filepath_or_buffer:文件路径
sep :分隔符, 默认用","隔开
usecols:指定读取的列名, 列表形式
DataFrame.to_csv(path_or_buf=None, sep=', ’, columns=None, header=True, index=True, mode=‘w’, encoding=None)
path_or_buf :文件路径
sep :分隔符, 默认用","隔开
columns :选择需要的列索引
header :boolean or list of string, default True,是否写进列索引值
index:是否写进行索引
mode:‘w’: 重写, ‘a’ 追加
# 选取10行数据保存,便于观察数据
data[:10].to_csv("E:/studyData/data/test.csv", columns=['open'])
JSON是我们常用的一种数据交换格式, 前面在前后端的交互经常用到, 也会在存储的时候选择这种格式。 所以我们需要知道Pandas如何进行
读取和存储JSON格式。
获取缺失值的标记方式(NaN或者其他标记方式)
如果缺失值的标记方式是NaN
如果缺失值没有使用NaN标记, 比如使用"? "
# 读取电影数据
movie = pd.read_csv("./data/IMDB-Movie-Data.csv")
pd.notnull(movie)
np.all(pd.notnull(movie)) # true代表不存在缺失值,false代表存在
np.any(pd.isnull(movie)) #里面如果有一个缺失值,返回true
# 删除缺失值
# 不修改原数据
data=movie.dropna()
for i in movie.columns:
if np.all(pd.notnull(movie[i])) == False:
print(i)
movie[i].fillna(movie[i].mean(), inplace=True)
解决办法:
1、 先替换‘?’为np.nan
df.replace(to_replace=, value=)
to_replace:替换前的值
value:替换后的值
# 把一些其它值标记的缺失值, 替换成np.nan
wis = wis.replace(to_replace='?', value=np.nan)
2、 在进行缺失值的处理
# 删除
wis = wis.dropna()
应用pd.concat实现数据的合并
应用pd.merge实现数据的合并
pd.concat([data1, data2], axis=1)
按照行或列进行合并,axis=0为列索引, axis=1为行索引
pd.merge(left, right, how=‘inner’, on=None)
可以指定按照两组数据的共同键值对合并或者左右各自
left : DataFrame
right : 另一个DataFrame
on : 指定的共同键
how:按照什么方式连接