pandas 模块 和 datatable 模块

pandas 模块

使用 to_patquet 操作 df 对象

# 使用 to_patquet 操作 df 对象
写入
import io

buffer = io.BytesIO()
dd = df.to_parquet(buffer)
buffer.seek(0)
rd5.hset("future_1m", key, buffer.read())

读取
dd = rd5.hget("future_1m_data", key)
dt = pd.read_parquet(io.BytesIO(dd))

pandas 读取中文乱码

# pandas 读取中文乱码
BO = pd.read_csv(r'D:\333333\555555\BO.csv', encoding='unicode_escape')
# pandas 写入中文乱码
df.to_csv(file_name3, encoding="utf_8_sig")

pandas 把datetime 转换为指定格式

# pandas 把datetime 转换为指定格式
data['month'] = data['time'].apply(lambda x:x.strftime('%Y-%m-d'))

将 df 对象转化为字典格式的两种方法

# 将 df 对象转化为字典格式的两种方法
da = df.to_dict(orient='records')
das = df.to_json(orient='records')

# 按照指定的方向转换
>>> df
   col1  col2
0     1     3
1     2     4
>>> [df.to_dict(orient='index')]
[{0: {'col1': 1, 'col2': 3}, 1: {'col1': 2, 'col2': 4}}]
>>> df.to_dict(orient='records')
[{'col1': 1, 'col2': 3}, {'col1': 2, 'col2': 4}]

# df 对象中指定两列形成字典
df[['a', 'b']].set_index('a').to_dict()['b']

pandas 常见使用方法

pandas
pandas 更改索引列名
df.index.name = 'name'

# 找出所有有缺失值的行
df[df.isnull().values==True]

# 按照索引排序
df.sort_index()
参数:
axis:0:按行索引进行排序,1 按列索引进行排序
ascending:默认True 升序排列,False 降序排列
inplace: 是否排序之后的数据直接替换原来的数据框,默认是 False
by:按照某一列或己列数据进行排序,但是by 参数貌似不建议使用

# 索引去重
df[~df.index.duplicated()]

# 删除重复数据
df['C'].drop_duplicates()

# 获取某一列的唯一值
df['name'].unique()

# 索引重命名
df = pd.DataFrame({'A': [1, 2, np.NaN,  3], 'B': [2, 3, 4, np.NaN], 'C': [4, np.NaN, 3, 4]}, index=['a', 'c', 'd', 'e'])

df = df.reindex(['a', 'd', 'e'])

使用reindex 后,会只保留 reindex 中出现的索引,如果之前索引中有,就继续继承之前索引中的值,如果之前索引中没有,新生成的df 对象,会有这一行,但是显示为空值

# 填充空值
df.fillna()
参数:
value:直接使用值填充,但是填充的时候就不需要指定 method 和 axis
method:指定按照哪一个值填充 ffill/bfill  按前一个填充/按后一个填充
axis:0 按列行填充,1 按列填充
inplace:是否直接在原表中修改
案例: ffill/0 表示按前一行的值进行填充    ffill/1 表示按前一行的值进列填充

# 对取出来的单独一列进行命名
df[column].name = 'name'

# pandas 中 df 对象 rolling 的使用
df["10D"] = df["acc_net_value"].rolling(10).std() * 100    # 作用是可以获取从当前位置向前多少条数据

# df 对象中,两列数据机算
df["value_shift"] = df.apply(lambda x: (x["acc_net_value"] / x["value"]) - 1, axis=1)

# isin  pandas  做筛选
df['a'].isin([1])    # 返回 bool 对象
df['a'][df['a'].isin([1])]    # 返回符合条件的值

datatable 模块

datatable 与 pandas 相似,但更侧重于速度和大数据支持

# 安装
pip install datatable

# 读取数据
import datatable as dt
df_dt = dt.fread(path)

优点:速度快,可以自动删除和分析绝大多数文本文件,zip压缩文档的下载数据,或URLs,读取Excel文件以及其他文件,可以自动删除分隔符,页眉,列类型以及引号规则等,可以多源读取数,包括文件,URL,shell,原始文本,存档和glob,急速多线程文件读取,显示读取文件的进度条,

# Frame 转换
numpy_df = df_dt.to_numpy()
pandas_df = df_dt.to_pandas()    # D:\333333\555555

# Frame 属性
datatable_df.shape    # (nrows, ncols)
datatable_df.names    # 列名 可以通过[:n] 的方式截取
datatable_df.stypes    # 列类型 可以通过[:n] 的方式截取
datatable_df.head()    # 默认前十行数据

# 汇总统计信息
datatable_df.sum()      datatable_df.nunique()
datatable_df.sd()       datatable_df.max()
datatable_df.mode()     datatable_df.min()
datatable_df.nmodal()   datatable_df.mean()

# 数据操作
在datatable 中,所有操作最基础的媒介就是 方括号符号
datatable_df[:3, :5]
datatable_df[:4, 'tradingday']

# Frame 排序
datatable_df.sort('tradingday')

# Frame 删除行/列
del datatable_df[:, []]    # 可以删除多行多列,如果同事指定,被删除的地方用 NA 填充

# 筛选
df_dt[dt.f.adj_high_price > dt.f.adj_price, ['adj_price', 'unixtime']]  # 显示多行

# Frame 存储
datatable_df.to_csv('output.csv')

posted @ 2020-12-29 16:31  余人。  阅读(430)  评论(0编辑  收藏  举报