python生成组合中对已经生成的Series,怎样组合成DataFrame

python中pandas库中DataFrame对行和列的操作使用方法
用pandas中的DataFrame时选取行或列:
import numpy as np
import pandas as pd
from pandas import Sereis, DataFrame
ser = Series(np.arange(3.))
data = DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz'))
#选择表格中的'w'列,使用类字典属性,返回的是Series类型
#选择表格中的'w'列,使用点属性,返回的是Series类型
data[['w']]
#选择表格中的'w'列,返回的是DataFrame类型
data[['w','z']]
#选择表格中的'w'、'z'列
#返回第1行到第2行的所有行,前闭后开,包括前不包括后
#返回第2行,从0计,返回的是单行,通过有前后值的索引形式,
#如果采用data[1]则报错
data.ix[1:2] #返回第2行的第三种方法,返回的是DataFrame,跟data[1:2]同
data['a':'b']
#利用index值进行切片,返回的是**前闭后闭**的DataFrame,
#即末端是包含的
data.irow(0)
#取data的第一行
data.icol(0)
#取data的第一列
data.head()
#返回data的前几行数据,默认为前五行,需要前十行则data.head(10)
data.tail()
#返回data的后几行数据,默认为后五行,需要后十行则data.tail(10)
ser.iget_value(0)
#选取ser序列中的第一个
ser.iget_value(-1) #选取ser序列中的最后一个,这种轴索引包含索引器的series不能采用ser[-1]去获取最后一个,这会引起歧义。
data.iloc[-1]
#选取DataFrame最后一行,返回的是Series
data.iloc[-1:]
#选取DataFrame最后一行,返回的是DataFrame
data.loc['a',['w','x']]
#返回‘a’行'w'、'x'列,这种用于选取行索引列索引已知
data.iat[1,1]
#选取第二行第二列,用于已知行、列位置的选取。
123456789101112131415161718192021222324252627282930313233343536373839404142123456789101112131415161718192021222324252627282930313233343536373839404142
下面是简单的例子使用验证:
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
data = DataFrame(np.arange(15).reshape(3,5),index=['one','two','three'],columns=['a','b','c','d','e'])
data.icol(0)
E:\Anaconda2\lib\site-packages\spyder\utils\ipython\start_kernel.py:1: FutureWarning: icol(i) is deprecated. Please use .iloc[:,i]
Name: a, dtype: int32
Name: a, dtype: int32
Name: a, dtype: int32
data[['a']]
data.ix[:,[0,1,2]]
data.ix[1,[0]]
Name: two, dtype: int32
data.ix[[1,2],[0]]
data.ix[1:3,[0,2]]
data.ix[1:2,2:4]
data.ix[data.a&5,3]
Name: d, dtype: int32
data.ix[data.b&6,3:4]
data.ix[data.a&5,2:4]
data.ix[data.a&5,[2,2,2]]
data.ix[1:3,['a','e']]
data.ix['one':'two',[2,1]]
data.ix[['one','three'],[2,2]]
data.ix['one':'three',['a','c']]
data.ix[['one','one'],['a','e','d','d','d']]
data.irow(1)
Name: two, dtype: int32
data.ix[1]
Name: two, dtype: int32
data['one':'two']
data.ix[1:3]
data.ix[-1:]
data.ix[-1]
Name: three, dtype: int32
data.tail(1)
data.head(1)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
最近处理数据时发现当pd.read_csv()数据时有时候会有读取到未命名的列,且该列也用不到,一般是索引列被换掉后导致的,有强迫症的看着难受,这时候dataframe.drop([columns,])是没法处理的,怎么办呢,&
最笨的方法是直接给列索引重命名:
Unnamed: 0
2016-11-01
18:10:44.8
2016-11-01
06:01:04.5
2016-11-01
07:46:25.5
2016-11-01
09:30:04.0
2016-11-01
09:31:04.0
data6.columns = list('abcd')
2016-11-01
18:10:44.8
2016-11-01
06:01:04.5
2016-11-01
07:46:25.5
2016-11-01
09:30:04.0
2016-11-01
09:31:04.0
1234567891011121314151617181920212212345678910111213141516171819202122
重新命名后就可以用dataframe.drop([columns])来删除了,当然不用我这样全部给列名替换掉了,可以只是改变未命名的那个列,然后删除。不过这个用起来总是觉得有点low,有没有更好的方法呢,有,可以不去删除,直接:
data7 = data6.ix[:,1:]11
这样既不改变原有数据,也达到了删除神烦列,当然我这里时第0列删除,可以根据实际选择所在的列删除之,至于这个原理,可以看下前面的对列的操作。
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?python中pandas模块的Series和DataFrame如果只有一个数值,如何转为成单个常量? - 知乎6被浏览906分享邀请回答0添加评论分享收藏感谢收起0添加评论分享收藏感谢收起写回答上一篇中介绍了numpy中数组的拼接方式:,接下来介绍另一个数据处理库pandas中最常用的Series和DataFrame对序列和表格的操作
concat 如 中所讲是numpy中concatenate的变种,两个使用方法一致。
join其实要结合下面的merge进行比较,join其实就是merge的一个特例或者说是一个快捷方式,通过设参,merge可以实现同join一样的效果。
append使用起来跟python内置的list中append效果是相同的,只不过针对的操作类型不同。
这个熟悉数据库操作的应该比较好理解,就是键的连接
当处理确实数据时,这个比较好用,也是一个快捷操作方式,相当于if-condition-else
本文已收录于以下专栏:
相关文章推荐
pandas作者Wes McKinney 在【PYTHON FOR DATA ANALYSIS】中对pandas的方方面面都有了一个权威简明的入门级的介绍,但在实际使用过程中,我发现书中的内容还只是冰...
merge  通过键拼接列
pandas提供了一个类似于关系数据库的连接(join)操作的方法merage,可以根据一个或多个键将不同DataFrame中的行连接起来
merge(le...
对于”group by”操作,我们通常是指以下一个或多个操作步骤:
(Splitting)按照一些规则将数据分为不同的组;
(Applying)对于每组数据分别执行一个函数;
(Combinin...
concat 与其说是连接,更准确的说是拼接。就是把两个表直接合在一起。于是有一个突出的问题,是横向拼接还是纵向拼接,所以concat 函数的关键参数是axis 。
函数的具体参数是:
axis=0表述列
axis=1表述行如下面例子:In [52]: arr=np.arange(12).reshape((3,4))
In [53]:arr
array([[ 0,...
作者:lianghc
地址:http://blog.csdn.net/zutsoft
        DataFrame 是pandas最常用的数据结构,类似于数据库中的表,不过DataFrame不...
笔记整理时间:日
笔记整理者:王小草向公司请了5天年假,提前回家过年。
长大了对过年反而没有太大期许,一切都是匆匆的路程,匆匆的相见,匆匆的碰杯与祝福,然后又匆匆回归朝夕规律地平...
在上一篇文章中,我整理了pandas在数据合并和重塑中常用到的concat方法的使用说明。在这里,将接着介绍pandas中也常常用到的join 和merge方法mergepandas的merge方法提...
在默认的 axis=0 情况下,pd.concat([obj1,obj2]) 函数的效果与 obj1.append(obj2) 是相同的;
而在 axis=1 的情况下,pd.concat([d...
请原谅没有一次写完,本文是自己学习过程中的记录,完善pandas的学习知识,对于现有网上资料的缺少和利用python进行数据分析这本书部分知识的过时,只好以记录的形势来写这篇文章.最如果后续工作定下来...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)作者:lianghc
merge &通过键拼接列
pandas提供了一个类似于关系数据库的连接(join)操作的方法&Strong&merage&/Strong&,可以根据一个或多个键将不同DataFrame中的行连接起来
merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False)用于通过一个或多个键将两个数据集的行连接起来,类似于 SQL 中的 JOIN。该函数的典型应用场景是,针对同一个主键存在两张包含不同字段的表,现在我们想把他们整合到一张表里。在此典型情况下,结果集的行数并没有增加,列数则为两个元数据的列数和减去连接键的数量。
on=None 用于显示指定列名(键名),如果该列在两个对象上的列名不同,则可以通过 left_on=None, right_on=None 来分别指定。或者想直接使用行索引作为连接键的话,就将 left_index=False, right_index=False 设为 True。
how='inner' 参数指的是当左右两个对象中存在不重合的键时,取结果的方式:inner 代表交集;outer 代表并集;left 和 right 分别为取一边。
suffixes=('_x','_y') 指的是当左右对象中存在除连接键外的同名列时,结果集中的区分方式,可以各加一个小尾巴。
对于多对多连接,结果采用的是行的笛卡尔积。
参数说明:
left与right:两个不同的DataFrame
how:指的是合并(连接)的方式有inner(内连接),left(左外连接),right(右外连接),outer(全外连接);默认为inner
on : 指的是用于连接的列索引名称。必须存在右右两个DataFrame对象中,如果没有指定且其他参数也未指定则以两个DataFrame的列名交集做为连接键
left_on:左则DataFrame中用作连接键的列名;这个参数中左右列名不相同,但代表的含义相同时非常有用。
right_on:右则DataFrame中用作 连接键的列名
left_index:使用左则DataFrame中的行索引做为连接键
right_index:使用右则DataFrame中的行索引做为连接键
sort:默认为True,将合并的数据进行排序。在大多数情况下设置为False可以提高性能
suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为('_x','_y')
copy:默认为True,总是将数据复制到数据结构中;大多数情况下设置为False可以提高性能
indicator:在 0.17.0中还增加了一个显示合并数据中来源情况;如只来自己于左边(left_only)、两者(both)
merge一些特性示例:
1.默认以重叠的列名当做连接键。
In [16]: df1=DataFrame({'key':['a','b','b'],'data1':range(3)})
In [17]: df2=DataFrame({'key':['a','b','c'],'data2':range(3)})
In [18]: pd.merge(df1,df2)
#没有指定连接键,默认用重叠列名,没有指定连接方式
2.默认做inner连接(取key的交集),连接方式还有(left,right,outer),制定连接方式加参数:how=''
In [19]: pd.merge(df2,df1)
#默认内连接,可以看见c没有连接上。
In [20]: pd.merge(df2,df1,how='left')
#通过how,指定连接方式
3.多键连接时将连接键组成列表传入,例:pd.merge(df1,df2,on=['key1','key2']
In [23]: right=DataFrame({'key1':['foo','foo','bar','bar'],
'key2':['one','one','one','two'],
'lval':[4,5,6,7]})
In [24]: left=DataFrame({'key1':['foo','foo','bar'],
'key2':['one','two','one'],
'lval':[1,2,3]})
In [25]: right=DataFrame({'key1':['foo','foo','bar','bar'],
'key2':['one','one','one','two'],
'lval':[4,5,6,7]})
In [26]: pd.merge(left,right,on=['key1','key2'],how='outer')
4.如果两个对象的列名不同,可以分别指定,例:pd.merge(df1,df2,left_on='lkey',right_on='rkey')
In [31]: df3=DataFrame({'key3':['foo','foo','bar','bar'], #将上面的right的key 改了名字
'key4':['one','one','one','two'],
'lval':[4,5,6,7]})
In [32]: pd.merge(left,df3,left_on='key1',right_on='key3')
#键名不同的连接
lval_x key3 key4
5.以索引当做连接键,使用参数left_index=true,right_index=True (最好使用join)
join 拼接列,主要用于索引上的合并
join方法提供了一个简便的方法用于将两个DataFrame中的不同的列索引合并成为一个DataFrame
join(self, other, on=None, how='left', lsuffix='', rsuffix='',sort=False):其中参数的意义与merge方法基本相同,只是join方法默认为左外连接how=left
1.默认按索引合并,可以合并相同或相似的索引,不管他们有没有重叠列。
2.可以连接多个DataFrame
3.可以连接除索引外的其他列
4.连接方式用参数how控制
5.通过lsuffix='', rsuffix='' 区分相同列名的列
concat &可以沿着一条轴将多个对象堆叠到一起
concat方法相当于数据库中的全连接(UNION ALL),可以指定按某个轴进行连接,也可以指定连接的方式join(outer,inner 只有这两种)。与数据库不同的时concat不会去重,要达到去重的效果可以使用drop_duplicates方法
concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False, copy=True):轴向连接 pd.concat() 就是单纯地把两个表拼在一起,这个过程也被称作连接(concatenation)、绑定(binding)或堆叠(stacking)。因此可以想见,这个函数的关键参数应该是 axis,用于指定连接的轴向。
在默认的 axis=0 情况下,pd.concat([obj1,obj2]) 函数的效果与 obj1.append(obj2) 是相同的;
而在 axis=1 的情况下,pd.concat([df1,df2],axis=1) 的效果与 pd.merge(df1,df2,left_index=True,right_index=True,how='outer') 是相同的。
可以理解为 concat 函数使用索引作为“连接键”。
本函数的全部参数为:
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False)。
objs 就是需要连接的对象集合,一般是列表或字典;
axis=0 是连接轴向join='outer' 参数作用于当另一条轴的 index 不重叠的时候,只有 'inner' 和 'outer' 可选(顺带展示 ignore_index=True 的用法)
concat 一些特点:
1.作用于Series时,如果在axis=0时,类似union。axis=1 时,组成一个DataFrame,索引是union后的,列是类似join后的结果。
2.通过参数join_axes=[] 指定自定义索引。
3.通过参数keys=[] 创建层次化索引
4.通过参数ignore_index=True 重建索引。
In [5]: df1=DataFrame(np.random.randn(3,4),columns=['a','b','c','d'])
In [6]: df2=DataFrame(np.random.randn(2,3),columns=['b','d','a'])
In [7]: pd.concat([df1,df2])
0 -0....163944
1....183934
0....620643
0 -0..707832
NaN -0.416589
NaN -1.874817In [8]: pd.concat([df1,df2],ignore_index=True)
0 -0....163944
1....183934
0....620643
3 -0..707832
NaN -0.416589
NaN -1.874817
本文已收录于以下专栏:
相关文章推荐
上一篇中介绍了numpy中数组的拼接方式:numpy中数组的拼接 ,接下来介绍另一个数据处理库pandas中最常用的Series和DataFrame对序列和表格的操作
concat 如num...
DataFrame是Pandas中的一个表结构的数据结构,包括三部分信息,表头(列的名称),表的内容(二维矩阵),索引(每行一个唯一的标记)。
一、DataFrame的创建
有多种方式可以...
pandas作者Wes McKinney 在【PYTHON FOR DATA ANALYSIS】中对pandas的方方面面都有了一个权威简明的入门级的介绍,但在实际使用过程中,我发现书中的内容还只是冰...
在数据挖掘过程中,经常会有不同表格的数据需要进行合并操作。今天介绍通过python下的pandas库下的merge方法和concat方法来实现数据集的合并。1.mergemerge 函数通过一个或多个...
xgboost入门与实战(原理篇)前言:
xgboost是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包,比常见的工具包快10倍以上。在数据科学方面...
Struts、Hibernate和Spring是我们Java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解决方案。但你是否知道,这些知名框架最初是怎样产生的?
  我们知道,传统的Jav...
在数据分析领域,最热门的莫过于Python和R语言,此前有一篇文章《别老扯什么Hadoop了,你的数据根本不够大》指出:只有在超过5TB数据量的规模下,Hadoop才是一个合理的技术选择。这次拿到近亿...
read_csv 中的参数与 DataFrame
concat 与其说是连接,更准确的说是拼接。就是把两个表直接合在一起。于是有一个突出的问题,是横向拼接还是纵向拼接,所以concat 函数的关键参数是axis 。
函数的具体参数是:
1 什么是神经网络■ 给出大量的x和y构成的训练样本
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)python pandas中对Series数据进行轴向连接 - Little-Grey - CSDN博客
python pandas中对Series数据进行轴向连接
有时候我们想要的数据合并结果是数据的轴向连接,在pandas中这可以通过concat来实现。操作的对象通常是Series。
Ipython中的交互代码如下:
from pandas
import Series,DataFrame
series1 = Series(range(2),index = ['a','b'])
series2 = Series(range(3),index = ['c','d','e'])
series3 = Series(range(2),index = ['f','g'])
import pandas
进行三个Series的连接:
pd.concat([series1,series2,series3])
dtype: int64
默认情况下,pandas执行的是按照axis=0进行连接。如果进行axis=1的连接,结果如下:
S1=pd.concat([series1,series2,series3],axis=1)
&& & 0& & 1& & 2
a& 0.0& NaN& NaN
b& 1.0& NaN& NaN
c& NaN& 0.0& NaN
d& NaN& 1.0& NaN
e& NaN& 2.0& NaN
f& NaN& NaN& 0.0
g& NaN& NaN& 1.0
In [26]: type(S1)
pandas.core.frame.DataFrame
结果是一个DataFrame,回头再看一下前面的Series的连接后的最终类型:
In [27]: type(pd.concat([series1,series2,series3]))
pandas.core.series.Series
两种方式的结果并不相同,一个结果是Series,另一个则是DataFrame。
series3 = Series(range(2),index = ['f','e'])
pd.concat([series1,series2,series3])
dtype: int64
从上面的一点测试中可以看出,concat的操作仅仅是单纯的连接,并没有涉及到数据的整合。如果想要进行整合,还是使用merge的方法。
我的热门文章}

我要回帖

更多关于 python 随机生成组合 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信