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相关推荐

  1. python 保存dataframe_在python2中将dataframe保存到CSV

    我正在尝试将数据帧保存到Csv.当我打印数据帧时,它会产生我想要的输出,但是当我将数据帧保存到csv文件时,我只得到保存到csv文件的最后一行数据帧..到目前为止我所做的.....在Index_tic ...

  2. python打印自动换行如何解决_解决python DataFrame 打印结果不换行问题

    解决python DataFrame 打印结果不换行问题 如下所示: 加入代码: pd.set_option('display.width', 5000) 补充知识:Python 实现不换行打印字符的 ...

  3. python把dict转为dataframe,将python OrderedDict转换为datafram

    我的记录OrderedDict,如下所示: my_record = OrderedDict([ (u'FIR_ID', '111249'), (u'FIR_TYPE', 'ORG')]) 我需要把它加 ...

  4. python行转列_pandas.DataFrame中pivot()如何实现行转列的问题(代码)

    本篇文章给大家带来的内容是关于pandas.DataFrame中pivot()如何实现行转列的问题(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 示例: 有如下表需要进行行转 ...

  5. python将dataframe导出为csv_python将dataframe转换为csv,为每列导出一个格式独特的文本文件...

    我正在Win7 64位上使用Python2.7.7和熊猫. 我的输入数据最初是以空格分隔的,右对齐的. 我现在有数据作为熊猫数据帧,我导出为一个csv. 我想写一个空格分隔的右对齐文本文件. 列有字符 ...

  6. python字典转dataframe_python DataFrame转dict字典过程详解

    python DataFrame转dict字典过程详解 这篇文章主要介绍了python DataFrame转dict字典过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习 ...

  7. pandas.DataFrame的pivot()和unstack()实现行转列

    示例: 有如下表需要进行行转列: 代码如下: # -*- coding:utf-8 -*- import pandas as pd import MySQLdb from warnings impor ...

  8. Python2解决的中文乱码问题

    Python2.7对于中文编码的问题处理的并不好,在此做一个简单的整理总结. Python 3 中字符均使用unicode编码,unicode函数不再需要. pyhton的所有内置库.方法接受的是un ...

  9. dataframe 切片_NumPy中的ndarray与Pandas的Series和DataFrame之间的区别与转换

    在数据分析中,经常涉及numpy中的ndarray对象与pandas的Series和DataFrame对象之间的转换,让一些开发者产生了困惑.本文将简单介绍这三种数据类型,并以金融市场数据为例,给出相 ...

  10. python发邮件图片太长显示不出来_小白入门,用python 发送定时邮件,将Dataframe转为邮件正文,链接显示为图片...

    在实际工作中,我们常常会遇到定时发送邮件的任务,基于我的实践,分享给大家,也许一篇文章写不完,就先列个目录. 本文想要解决的问题: 用python构造一封邮件,并设置定时发送出去.往往,这只是最低级的 ...

最新文章

  1. 阿里巴巴副总裁司罗:达摩院如何搭建NLP技术体系?
  2. Ubicomp一些有意思的论文
  3. Linux基本命令解析(1)
  4. nikon n150在电脑中不显示里面的图片的解决方法
  5. datatables 配套bootstrap样式使用小结(2) ajax篇
  6. 学习BIOS与CMOS区别
  7. 微信公众号自定义菜单
  8. C语言基础视频教程 15天
  9. 业务系统监控解决方案
  10. AD(十九)class、设计参数、规则的创建
  11. 怎么有效提高淘宝店铺的转化率方法步骤
  12. 大数据Java基础一
  13. js完美转换阿拉伯数字为数字大写
  14. 【前端】使用nexus搭建本地npm仓库
  15. vue 自定义指令 directives
  16. BRENDAN MCCAFFREY:自行车大师
  17. 麦金塔下载Adobe系列
  18. mysql select符合查询_mysql学习-select查询,子查询,联接查询,union,intersect,except联合...
  19. mysql 创建唯一约束表
  20. C++中的set函数用法详解

热门文章

  1. matplotlib散点图自定义坐标轴(文字坐标轴)
  2. ssoj3991: 雪人(snowman)
  3. 不良事件总结怎么写_年度不良事件总结
  4. abaqus python提取楼层剪力_用Python提取ABAQUS中节点集合的反力
  5. 【RDMA】qp数量和RDMA性能(节选)|连接数
  6. 基于Python实现的远程控制主机设计
  7. 康托尔悖论:大全集不存在,即包含一切集合的集合是否存在
  8. html插入cad,cad插件有哪些
  9. python有哪些学习内容_python学习内容包括哪些
  10. 需求分析师面试题案例_如何准备作为分析师的业务案例面试