python2 之 DataFrame
1. 拼接:
a. concat:
pd.concat(axis=0,在下方;axis=1,在右方)
eg:adfoutputexpand=pd.concat([a1,b1,c1,d1],axis=1 ,sort=True)
.concatenate:把多个字符文本或数值连接在一起,实现合并的功能。
【可以用于for循环中的series和dataframe拼接】
b. merge:
merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
pd.merge(df1,df2) ##,默认how='inner',
pd.merge(df1,df2,on='key',how='inner')##以df1、df2中相同的列名key进行连接,这个是简化的
pd.merge(df1,df2,how='outer') ## 全连接,取并集,这个是并起来,有nan
pd.merge(df1,df2,how='left') ### 左连接,以左边df为标准取全部,右边取部分,没有值则用NaN填充
如果两个DataFrame的左右连接键的列名不一样,可以用left_on,right_on来进行指定
pd.merge(df3,df4,left_on='lkey',right_on='rkey') ### 内连接,默认how='inner'
pd.merge(df3,df4,left_on='lkey',right_on='lkey',how='outer') ### 全连接
根据索引连接:
pd.merge(df5,df6,left_index=True,right_index=True)
c. append 拼接,注意ignore_index
trading_all1 = trading_all1.append(trading_all, ignore_index=True)
2. 创建
创建全部为nan的dataframe
position_selected = pd.DataFrame(index = position_all.index, columns = ['fund_mv', 'security_mv'])
全零和全一矩阵:
pd.DataFrame(np.ones((4,4)))
pd.DataFrame(np.zeros((3,3)))
拼接list(zip)成DataFrame:
combine=pd.DataFrame(list(zip(return1,M2_M1now)),columns=['收益率','M2-M1增速差'])
如果series的index不同,全部转为array拼成dataframe
collect1=pd.DataFrame([ptmtradeday2.values,vol_call2.values,delta_call2.values]).T
collect1=pd.DataFrame([np.array(ptmtradeday2),np.array(vol_call2),np.array(delta_call2)]).T
3. 数据清洗:缺失值、去空值、去重、排序、填充:
(1)缺失值:
a. 看到哪些列有缺失值,False 和True表示
df.isnull().any()
b. 筛选出有缺失值的列/行,nan的列/行全部列出
df[df.isnull().any(axis=1)] # 列
df.loc[:,df.isnull().any()] #行
c. 找出有缺失值的地方
np.where(np.isnan(data))
np.where(np.isinf(data))
(2)去空值
按行/列去空值
overview = overview.dropna()
overview = overview.T.dropna().T
就特定某一列进行去空值
overview = overview.dropna(subset=['fund'])
将inf和nan替换成0 [注:此时np.isnan(rawdatapct2)是true或false,如果true则为0]
rawdatapct2=np.array(rawdatapct1)
rawdatapct2[np.isnan(rawdatapct2)]=0
rawdatapct2[np.isinf(rawdatapct2)]=0
rawdatapct1=pd.DataFrame(rawdatapct2)
以某一特定数替代:
rawdata1.open.fillna(rawdata1.close,inplace=True) # open和close都是列名。 将没有开盘价的全部改为收盘价,有的数据保持不变
将0替换成nan:
datasign.replace(0,np.nan)
data2=data1.replace({0:np.NaN})
(3)去重
选取某一列进行去重
time_all = df['tradedate'].drop_duplicates().sort_values(ascending = True)
排序之后如果index也乱了,需要加上reset_index
time_all = time_all.reset_index (drop = True)
(4)排序
按索引排序:df1.sort_index()
按列名排序:df1.sort_index(axis=1)
对某一列进行排序:
df2.sort_values(by='b')对df2按照b列排序,
df2.sort_values(by=['b','a'])对df2按照b列排序后如有相同的再按照a列排序,
df2.sort_values(by=['a','b'])对df2按照a列排序后如有相同的再按照b列排序,
res = df.sort_values(by='A', ascending=False) # 降序:ascending=False, 升序:ascending = True
按索引排名:df2.rank()
按列排名:df2.rank(axis=1)
(5)填充
将某一列以零填充
c['PnL'] = c['value_increments'].fillna(0)
4. 选取
选取某一列为特定值的所有dataframe
cus[cus['mode'] == mode]
取或
position22 = position1[(position1['asset_class'] == '股票') | (position1['asset_class'] == '融券')]
取某一列大于或小于特定值
position['long_short'] = position['mv'] >= 0
输出行数:x.shape[0]
输出列数:x.shape[1]
取第一列:dataframe.loc[:,'one']
取第一列:dataframe.iloc[:,0]
取最后一个数:list1【len(list1)-1】
取dataframe的列名:a.columns[0]
选取特定的行:pnl_risk_df.loc["上海汇总"]
raw=rawdata1.loc[rawdata1['TRADEDAY']=='20200410']
取最前面的五位数: c=b.iloc[0:5,0]
取分位数:dispersion_percent=(dispersion1-min(dispersion1.iloc[:,0]))/(max(dispersion1.iloc[:,0])-min(dispersion1.iloc[:,0]))
取前n行数据:R_beta.head(5)函数返回前n行数据,n默认等于5
取有间隔的多列数据:
df=df,loc[:, ['A','C']]
df=df.iloc[:, [0,1]]
df=df.iloc[:,1:3]
5. 删除
df.drop((name, axis=1), 删掉了一列
eg:
(1)df.drop(['B', 'C'], axis=1)
(2)vol=vol.drop(vol.columns[0],axis=1) #删除第零列
(3)vol=vol.drop(vol.index[0]) #删除第零行
(4)删除table值为sc的那一行: df.drop(index=(df.loc[(df['table']=='sc')].index))
(5)删除指定日期:dayframe1=dayframe.drop(pd.to_datetime('2013-02-08'))
6. 计算
计算均值: df.mean(axis=1)代表沿着列水平方向计算均值
中位数:df.median()
最大值:df.max()
最小值:df.min()
矩阵与矩阵之间:columns和index都得相等。
两个相同行、列dataframe相乘:pospct=POSITION.multiply(rawdatapct1.values,axis=0)
两个相同行、列dataframe相除:pospct=POSITION.divide(rawdatapct1.values,axis=0)
df.mean()等价于df.mean(0)。把轴向数据求平均,得到每列数据的平均值。
df.mean(1)按照另外一个axis的方向来求平均,得到每行数据的平均值。
frame与series的运算:
frame.add(series1,axis=0)
frame.sub(series1,axis=0)
frame.mul(series1,axis=0)
frame.div(series1,axis=0)
7. 聚类:
group by:将相同时间(key1)里面的因子(data1)进行聚合
df.groupby('key1')['data1'].mean()
df['data1'].groupby(df['key1']).mean()
df['rank_g'] = df.groupby(['gender'])['age'].rank()
通过字典分组:
mapping = {'香蕉':'水果','苹果':'水果','橘子':'水果','眼影':'化妆品','眼线':'化妆品'}
data = people.groupby(mapping,axis=1).mean()
8. 格式转换
astype
indpermonth['rank'] = indpermonth['rank'].astype(float)
9. 复制
dataframe的复制:copy
在出现错误时考虑是否因为没有将原变量进行备份,导致新旧变量运行中出现混乱
dataframe.copy(deep=True/False)
深拷贝的结果,在后面即使想改,也是不会变;如果不是深拷贝,那么在后面改变的时候是可以使矩阵的值改变。
10. 判断
isin:isin()接受一个列表,判断该列中元素是否在列表中。
a. 看是否在其中,True、False
df.E.isin(['a','c']), df.isin(['b','c']) 【注,E是列名】
b. 应用:E列中包含a、c的所有的行再组成dataframe
df[df.E.isin(['a','c'])]
c. 特定值的行
df[(df==0).any(axis=1)]
11. map 的用法: 替代for循环,辅助加速
map(function, list)
简写
map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
提供了两个列表,对相同位置的列表数据进行相加
map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
以def写复杂函数
python2 之 DataFrame相关推荐
- python 保存dataframe_在python2中将dataframe保存到CSV
我正在尝试将数据帧保存到Csv.当我打印数据帧时,它会产生我想要的输出,但是当我将数据帧保存到csv文件时,我只得到保存到csv文件的最后一行数据帧..到目前为止我所做的.....在Index_tic ...
- python打印自动换行如何解决_解决python DataFrame 打印结果不换行问题
解决python DataFrame 打印结果不换行问题 如下所示: 加入代码: pd.set_option('display.width', 5000) 补充知识:Python 实现不换行打印字符的 ...
- python把dict转为dataframe,将python OrderedDict转换为datafram
我的记录OrderedDict,如下所示: my_record = OrderedDict([ (u'FIR_ID', '111249'), (u'FIR_TYPE', 'ORG')]) 我需要把它加 ...
- python行转列_pandas.DataFrame中pivot()如何实现行转列的问题(代码)
本篇文章给大家带来的内容是关于pandas.DataFrame中pivot()如何实现行转列的问题(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 示例: 有如下表需要进行行转 ...
- python将dataframe导出为csv_python将dataframe转换为csv,为每列导出一个格式独特的文本文件...
我正在Win7 64位上使用Python2.7.7和熊猫. 我的输入数据最初是以空格分隔的,右对齐的. 我现在有数据作为熊猫数据帧,我导出为一个csv. 我想写一个空格分隔的右对齐文本文件. 列有字符 ...
- python字典转dataframe_python DataFrame转dict字典过程详解
python DataFrame转dict字典过程详解 这篇文章主要介绍了python DataFrame转dict字典过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习 ...
- pandas.DataFrame的pivot()和unstack()实现行转列
示例: 有如下表需要进行行转列: 代码如下: # -*- coding:utf-8 -*- import pandas as pd import MySQLdb from warnings impor ...
- Python2解决的中文乱码问题
Python2.7对于中文编码的问题处理的并不好,在此做一个简单的整理总结. Python 3 中字符均使用unicode编码,unicode函数不再需要. pyhton的所有内置库.方法接受的是un ...
- dataframe 切片_NumPy中的ndarray与Pandas的Series和DataFrame之间的区别与转换
在数据分析中,经常涉及numpy中的ndarray对象与pandas的Series和DataFrame对象之间的转换,让一些开发者产生了困惑.本文将简单介绍这三种数据类型,并以金融市场数据为例,给出相 ...
- python发邮件图片太长显示不出来_小白入门,用python 发送定时邮件,将Dataframe转为邮件正文,链接显示为图片...
在实际工作中,我们常常会遇到定时发送邮件的任务,基于我的实践,分享给大家,也许一篇文章写不完,就先列个目录. 本文想要解决的问题: 用python构造一封邮件,并设置定时发送出去.往往,这只是最低级的 ...
最新文章
- 阿里巴巴副总裁司罗:达摩院如何搭建NLP技术体系?
- Ubicomp一些有意思的论文
- Linux基本命令解析(1)
- nikon n150在电脑中不显示里面的图片的解决方法
- datatables 配套bootstrap样式使用小结(2) ajax篇
- 学习BIOS与CMOS区别
- 微信公众号自定义菜单
- C语言基础视频教程 15天
- 业务系统监控解决方案
- AD(十九)class、设计参数、规则的创建
- 怎么有效提高淘宝店铺的转化率方法步骤
- 大数据Java基础一
- js完美转换阿拉伯数字为数字大写
- 【前端】使用nexus搭建本地npm仓库
- vue 自定义指令 directives
- BRENDAN MCCAFFREY:自行车大师
- 麦金塔下载Adobe系列
- mysql select符合查询_mysql学习-select查询,子查询,联接查询,union,intersect,except联合...
- mysql 创建唯一约束表
- C++中的set函数用法详解
热门文章
- matplotlib散点图自定义坐标轴(文字坐标轴)
- ssoj3991: 雪人(snowman)
- 不良事件总结怎么写_年度不良事件总结
- abaqus python提取楼层剪力_用Python提取ABAQUS中节点集合的反力
- 【RDMA】qp数量和RDMA性能(节选)|连接数
- 基于Python实现的远程控制主机设计
- 康托尔悖论:大全集不存在,即包含一切集合的集合是否存在
- html插入cad,cad插件有哪些
- python有哪些学习内容_python学习内容包括哪些
- 需求分析师面试题案例_如何准备作为分析师的业务案例面试