39 pandas统计分析基础--DataFrame

  • 创建:创建DataFrame的方法有很多,最常用的一种是直接传入一个由等长列表或Numpy数组组成的字典:
import pandas as pd

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
print(frame)

在这里插入图片描述DataFrame会自动加上索引(跟Series一样)。并且全部列会被有序排列。

  • 对于特别大的DateFrame,head()方法会选取前五行:
import pandas as pd

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
print(frame.head())

在这里插入图片描述

  • 如果指定了列序列,则DataFrame的列就会按照指定顺序进行排列。
import pandas as pd

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop'])
print(frame1)

在这里插入图片描述

  • 如果传入的列在数据中找不到,就会在结果中产生缺失值。
import pandas as pd

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
                      index=['one', 'two', 'three', 'four','five', 'six'])
print(frame1)
print(frame1.columns)

在这里插入图片描述

  • 访问(索引):通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series:
import pandas as pd

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
                      index=['one', 'two', 'three', 'four','five', 'six'])
print(frame1['state'])
print()
print(frame1.year)

在这里插入图片描述这里返回的Series拥有原DataFrame相同的索引,其name属性也已经被相应的设置好了。

  • 行也可以通过位置或名称的方式进行获取,比如用loc属性。
import pandas as pd

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
                      index=['one', 'two', 'three', 'four','five', 'six'])
print(frame1.loc['three'])

在这里插入图片描述

  • 列可以用赋值的方式进行修改。例如,可以给之前空的’debt’列赋上一个标量或者一组值
import pandas as pd
import numpy as np

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
                      index=['one', 'two', 'three', 'four','five', 'six'])
                      
frame1['debt'] = 16.5
print(frame1)
print()
frame1['debt'] = np.arange(6.)
print(frame1)

在这里插入图片描述

  • 将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。
    如果赋值的是一个Series,就会精确匹配DataFrame的索引。所有的空位都被填上缺失值:
import pandas as pd
import numpy as np

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
                      index=['one', 'two', 'three', 'four','five', 'six'])
val = pd.Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])
frame1['debt'] = val
print(frame1)

在这里插入图片描述

  • 为不存在的列赋值会创建出一个新列。关键字del用于删除列。
    这里先添加一列,state是否为’Ohio’
import pandas as pd
import numpy as np

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
# print(frame)
# print(frame.head())
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
                      index=['one', 'two', 'three', 'four', 'five', 'six'])
frame1['eastern'] = frame1.state == 'Ohio'  # 注意不能用frame2.eastren创建新的列
print(frame1)
print()
del frame1['eastern']
print(frame1.columns)

在这里插入图片描述注意:***通过索引方式返回的列只是相应数据的视图而已,并不是副本。因此,对返回的Series所做的任何就地修改全部都会反映到源DataFrame上。***通过Series的copy方法可以指定复制列。

  • 另一种常见的数据形式是嵌套字典,如果嵌套字典传给DataFrame,pandas就会被解释为:外层字典的键作为列,内层键作为行索引。内层字典的键会被合并、排序以形成最终的索引。
import pandas as pd

pop = {'Nevada': {2001: 2.4, 2002: 9.9}, 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.9}}
frame = pd.DataFrame(pop)
print(frame)

在这里插入图片描述
如果指定了索引,就不会这样:

frame = pd.DataFrame(pop, index=[2001, 2002, 2003])

在这里插入图片描述

  • 也可以使用Numpy数组的方法,对DataFrame进行转置(交换行和列)。
print(frame.T)

在这里插入图片描述

  • DataFrame的index和columns也有name属性。可以设置。
import pandas as pd

pop = {'Nevada': {2001: 2.4, 2002: 9.9}, 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.9}}
frame = pd.DataFrame(pop)
frame = pd.DataFrame(pop, index=[2001, 2002, 2003])
frame.index.name = 'year'
frame.columns.name = 'state'
print(frame)

在这里插入图片描述

  • 和Series一样,values属性也会以二位ndarray的形式返回DataFrame中的数据。
print(frame.values)

在这里插入图片描述

  • 如果DataFrame各列的数据类型不同,则value数组的dtype就会选用能兼容所有列的数据类型。因为ndarray数组内的所有元素具有相同的数据类型

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

  • 虽然DataFrame以二维结构保存数据,但是仍然可以轻松的将其表示为更高维度的数据(层次化索引的表格型结构),这是pandas中许多高级数据处理功能的关键要素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值