【3】数据分析--10--科学计算--Pandas--3--Dataframe创建

DataFrame类型由共用相同索引的一组列组成

索引 多列数据
index_0 data_a data_1 data_w
index_1 data_b data_2 ...... data_x
index_2 data_c data_3 data_y
index_3 data_d data_4 data_z

DataFrame是一个表格型的数据类型,每列值类型可以不同 DataFrame既有行索引、也有列索引

DataFrame常用于表达二维数据,但可以表达多维数据

DataFrame类型可以由如下类型创建:

  • 二维ndarray对象
  • 由一维ndarray、列表、字典、元组或Series构成的字典
  • Series类型
  • 其他的DataFrame类型

一、 二维ndarray对象

import pandas as pd
import numpy as np

d = pd.DataFrame(np.arange(10).reshape(2,5))

d
Out[4]: 
   0  1  2  3  4
0  0  1  2  3  4
1  5  6  7  8  9

#自动索引

二、从一维ndarray对象字典创建

import pandas as pd
import numpy as np 
t = {'one':pd.Series([1,2,3],index = ['a','b','c']),'two':pd.Series([9,8,7,6],index = ['a','b','c','d'])}
d = pd.DataFrame(dt)
print d

   one  two
a  1.0    9
b  2.0    8
c  3.0    7
d  NaN    6

三、 从列表类型的字典创建

import pandas as pd
import numpy as np 

dt = {'one':[1,2,3,4],'two':[9,8,7,6]}
d = pd.DataFrame(dt,index =['a','b','c','d'])
print d

   one  two
a    1    9
b    2    8
c    3    7
d    4    6

print d.index
Index([u'a', u'b', u'c', u'd'], dtype='object')

print d.columns
Index([u'one', u'two'], dtype='object')

print d.values
[[1 9]
 [2 8]
 [3 7]
 [4 6]]

print d['one']
a    1
b    2
c    3
d    4
Name: one, dtype: int64

print d.ix['a']
one    1
two    9
Name: a, dtype: int64

print d['one']['a']
1

DataFrame基本操作类似Series,依据行列索引

四、 将列表(List)转换为数据框(Dataframe)

Python中将列表转换成为数据框有两种情况:第一种是两个不同列表转换成一个数据框,第二种是一个包含不同子列表的列表转换成为数据框。

第一种:两个不同列表转换成为数据框

from pandas.core.frame import DataFrame
a=[1,2,3,4]#列表a
b=[5,6,7,8]#列表b
c={"a" : a,
   "b" : b}#将列表a,b转换成字典
data=DataFrame(c)#将字典转换成为数据框
print(data)

输出的结果为

   a  b
0  1  5
1  2  6
2  3  7
3  4  8

第二种:将包含不同子列表的列表转换为数据框

from pandas.core.frame import DataFrame
a=[[1,2,3,4],[5,6,7,8]]#包含两个不同的子列表[1,2,3,4]和[5,6,7,8]
data=DataFrame(a)#这时候是以行为标准写入的
print(data)

输出结果:

   0  1  2  3
0  1  2  3  4
1  5  6  7  8

数据框的转置

data=data.T#转置之后得到想要的结果
data.rename(columns={0:'a',1:'b'},inplace=True)#注意这里0和1都不是字符串
print(data)

结果文件:

   a  b
0  1  5
1  2  6
2  3  7
3  4  8

五、文件读取

最近处理数据时发现当pd.read_csv()数据时有时候会有读取到未命名的列,且该列也用不到,一般是索引列被换掉后导致的,有强迫症的看着难受,这时候dataframe.drop([columns,])是没法处理的,怎么办呢, 最笨的方法是直接给列索引重命名:

data6

        Unnamed: 0  high    symbol  time
date                
2016-11-01  0   3317.4  IF1611  18:10:44.8
2016-11-01  1   3317.4  IF1611  06:01:04.5
2016-11-01  2   3317.4  IF1611  07:46:25.5
2016-11-01  3   3318.4  IF1611  09:30:04.0
2016-11-01  4   3321.8  IF1611  09:31:04.0

data6.columns = list(‘abcd’)

data6

    a   b   c   d
date                
2016-11-01  0   3317.4  IF1611  18:10:44.8
2016-11-01  1   3317.4  IF1611  06:01:04.5
2016-11-01  2   3317.4  IF1611  07:46:25.5
2016-11-01  3   3318.4  IF1611  09:30:04.0
2016-11-01  4   3321.8  IF1611  09:31:04.0

bb = pd.read_csv(“ig_bases_mutated_nucl_freq.tsv”,sep=’\t’,index_col=False,header=None,skip_blank_lines=True)

index_col=False # 不用第一列作为index header=None # 不用第一行作为header

如果header=None,则默认的columns.names为[0,1,2,3..],数字哦

参考资料

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学