机器学习--数据分析Pandas(二)--数据结构DataFrame

数据结构 DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。

怎么理解DataFrame?

 DataFrame可以理解为一个类似Excel的数据结构的2D数组,它包含行索引(index)、列索引(columns)和值。相比普通的2D数组,它优点在于有自己的行索引和列索引。

__init__(self, data=None, index=None, columns=None, dtype=None,
             copy=False):

可以输入给DataFrame构造器的数据

类型说明
二维ndarray
由数组、列表或元组组成的字典每个序列会变成DataFrame的一列,所有序列的长度必须相同。
NumPy的结构化/记录数组类似于“由数组组成的字典”
由Series组成的字典每个Series会组成一列。如果没有显示指定索引,则各Series的索引会被合并成结果的行索引。
由字典组成的字典各内层字典会成为一列。键会被合并成结果的行索引,跟“由Series组成的字典”的情况一样。
字典或Series的列表各项将会成为DataFrame的一行。字典键或Series索引的并集将会成为DataFrame的列标。
由列表或元组组成的列表类似于“二维ndarray”
另一个DataFrame 该DataFrame的索引将会被沿用,除非显示指定了其他索引。
NumPy的MaskedArray 类似于“二维ndarray”的情况,只是掩码值在结果DataFrame会变成NA/缺失值。

# -*- coding: utf-8 -*- 

import numpy as np
from pandas import Series, DataFrame

print('用字典生成DataFrame,key为列的名字。'
      '由于字典是无序的,所以用字典生成的 DataFrame也是无序的。'
      '如果要按顺序显示DataFrame,用参数columns指定列索引,index指定行索引显示')
data = {'state':['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
        'year':[2000, 2001, 2002, 2001, 2002],
        'pop':[1.5, 1.7, 3.6, 2.4, 2.9]}
print(DataFrame(data))
print(DataFrame(data, columns = ['year', 'state', 'pop'])) # 指定列顺序
print("---------0000----------")

print('指定索引,在列中指定不存在的列,默认数据用NaN。')
frame2 = DataFrame(data,
                    columns = ['year', 'state', 'pop', 'debt'],
                    index = ['one', 'two', 'three', 'four', 'five'])
#取列值可以obj["columns"]或者obj.columns两种方式
print(frame2)
print(frame2['state'])
print(frame2.year)
print("---------1111----------")
#显示行值可以obj.ix[index]
print(frame2.ix['three'])
frame2['debt'] = 16.5 # 修改一整列
print(frame2)
frame2.debt = np.arange(5)  # 用numpy数组修改元素
print(frame2)
print("---------2222----------")

print('用Series指定要修改的索引及其对应的值,没有指定的默认数据用NaN。')
val = Series([-1.2, -1.5, -1.7], index = ['two', 'four', 'five'])
frame2['debt'] = val
print(frame2)
print("---------3333----------")

print('赋值给新列')
frame2['eastern'] = (frame2.state == 'Ohio')  # 如果state等于Ohio为True
print(frame2)
print(frame2.columns)
print("---------4444----------")

print('DataFrame转置')
pop = {'Nevada':{2001:2.4, 2002:2.9},
        'Ohio':{2000:1.5, 2001:1.7, 2002:3.6}}
frame3 = DataFrame(pop)
print(frame3)
print(frame3.T)
print("---------5555----------")
用字典生成DataFrame,key为列的名字。由于字典是无序的,所以用字典生成的 DataFrame也是无序的。如果要按顺序显示DataFrame,用参数columns指定列索引,index指定行索引显示
   pop   state  year
0  1.5    Ohio  2000
1  1.7    Ohio  2001
2  3.6    Ohio  2002
3  2.4  Nevada  2001
4  2.9  Nevada  2002
   year   state  pop
0  2000    Ohio  1.5
1  2001    Ohio  1.7
2  2002    Ohio  3.6
3  2001  Nevada  2.4
4  2002  Nevada  2.9
---------0000----------
指定索引,在列中指定不存在的列,默认数据用NaN。
       year   state  pop debt
one    2000    Ohio  1.5  NaN
two    2001    Ohio  1.7  NaN
three  2002    Ohio  3.6  NaN
four   2001  Nevada  2.4  NaN
five   2002  Nevada  2.9  NaN
one        Ohio
two        Ohio
three      Ohio
four     Nevada
five     Nevada
Name: state, dtype: object
one      2000
two      2001
three    2002
four     2001
five     2002
Name: year, dtype: int64
---------1111----------
year     2002
state    Ohio
pop       3.6
debt      NaN
Name: three, dtype: object
       year   state  pop  debt
one    2000    Ohio  1.5  16.5
two    2001    Ohio  1.7  16.5
three  2002    Ohio  3.6  16.5
four   2001  Nevada  2.4  16.5
five   2002  Nevada  2.9  16.5
       year   state  pop  debt
one    2000    Ohio  1.5     0
two    2001    Ohio  1.7     1
three  2002    Ohio  3.6     2
four   2001  Nevada  2.4     3
five   2002  Nevada  2.9     4
---------2222----------
用Series指定要修改的索引及其对应的值,没有指定的默认数据用NaN。
       year   state  pop  debt
one    2000    Ohio  1.5   NaN
two    2001    Ohio  1.7  -1.2
three  2002    Ohio  3.6   NaN
four   2001  Nevada  2.4  -1.5
five   2002  Nevada  2.9  -1.7
---------3333----------
赋值给新列
       year   state  pop  debt  eastern
one    2000    Ohio  1.5   NaN     True
two    2001    Ohio  1.7  -1.2     True
three  2002    Ohio  3.6   NaN     True
four   2001  Nevada  2.4  -1.5    False
five   2002  Nevada  2.9  -1.7    False
Index(['year', 'state', 'pop', 'debt', 'eastern'], dtype='object')
---------4444----------
DataFrame转置
      Nevada  Ohio
2000     NaN   1.5
2001     2.4   1.7
2002     2.9   3.6
        2000  2001  2002
Nevada   NaN   2.4   2.9
Ohio     1.5   1.7   3.6
---------5555----------
指定索引顺序,以及使用切片初始化数据。
      Nevada  Ohio
2001     2.4   1.7
2002     2.9   3.6
2003     NaN   NaN
      Nevada  Ohio
2000     NaN   1.5
2001     2.4   1.7
---------6666----------
指定索引和列的名称
state  Nevada  Ohio
year               
2000      NaN   1.5
2001      2.4   1.7
2002      2.9   3.6
[[ nan  1.5]
 [ 2.4  1.7]
 [ 2.9  3.6]]
[[2000 'Ohio' 1.5 nan True]
 [2001 'Ohio' 1.7 -1.2 True]
 [2002 'Ohio' 3.6 nan True]
 [2001 'Nevada' 2.4 -1.5 False]
 [2002 'Nevada' 2.9 -1.7 False]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值