pandas入门之DataFrame

创建DataFrame

- DataFrame是一个【表格型】的数据结构。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
- 创建DataFrame的方式
    - 列表
    - 字典
    - 系列
    - Numpy ndarrays
    - 另一个数据帧(DataFrame)
- DataFrame的参数
    - data   数据采取各种形式,如:ndarray,series,map,lists,dict,constant和另一个DataFrame。
    - index   对于行标签,要用于结果帧的索引是可选缺省值np.arrange(n),如果没有传递索引值。
    - columns  对于列标签,可选的默认语法是 - np.arange(n)。 这只有在没有索引传递的情况下才是这样。
    - dtype   每列的数据类型。
    - copy   如果默认值为False,则此命令(或任何它)用于复制数据。

列表创建DataFrame

单个列表

data = [1,2,3,4,5]
df = pd.DataFrame(data)
print(df)

   0
0  1
1  2
2  3
3  4
4  5

列表套列表

# 列表套列表
data = [[‘Alex‘,10],[‘Bob‘,12],[‘Clarke‘,13]]
df = pd.DataFrame(data,columns=["name","age"],dtype=float) # dtype指定输出的数字类型,可加可不加
print(df)

     name   age
0    Alex  10.0
1     Bob  12.0
2  Clarke  13.0

ndarrays/Lists[多维数组]的字典来创建DataFrame

- 所有的ndarrays必须具有相同的长度。如果传递了索引(index),则索引的长度应等于数组的长度。
- 如果没有传递索引,则默认情况下,索引将为range(n),其中n为数组长度。
import pandas as pd
data = {‘Name‘:[‘Tom‘, ‘Jack‘, ‘Steve‘, ‘Ricky‘],‘Age‘:[28,34,29,42]}
df = pd.DataFrame(data)
print(df)   # 0,1,2,3 就是range(数组)得到的值

    Name  Age
0    Tom   28
1   Jack   34
2  Steve   29
3  Ricky   42

指定索引

import pandas as pd
data = {‘Name‘:[‘Tom‘, ‘Jack‘, ‘Steve‘, ‘Ricky‘],‘Age‘:[28,34,29,42]}
df = pd.DataFrame(data,index=[‘1‘,‘2‘,‘3‘,‘4‘])   # 指定索引
print(df)

    Name  Age
1    Tom   28
2   Jack   34
3  Steve   29
4  Ricky   42

字典列表创建DataFrame 【列表中套字典】

# 字典列表可作为输入数据传递以用来创建数据帧(DataFrame),
data = [{‘a‘: 1, ‘b‘: 2},{‘a‘: 5, ‘b‘: 10, ‘c‘: 20}]  # 字典键默认为列名,没有值得为NaN
df = pd.DataFrame(data,index=["first","second"])  # 自定义行索引
print(df)

        a   b     c
first   1   2   NaN
second  5  10  20.0

使用字典,行索引和列索引列表创建DataFrame

data = [{"name":"alex","age":87,"gender":"男"},{"name":"wuchao","age":20,"gender":"男"}]
df = pd.DataFrame(data,index=[1,2],columns=["name","age","gender"])  # 自定义行索引和列索引
print(df)

     name  age   gender
1    alex   87      男
2  wuchao   20      男

从Series的字典来创建数据帧

  • 字典的系列可以传递以形成一个DataFrame。 所得到的索引是通过的所有系列索引的并集
data = {
        "one":pd.Series(["1","2","3"],index=["a","b","c"],dtype=float), # 指定数字输出类型
        "tow":pd.Series(["1","2","3","4"],index=["a","b","c","d"])
       }
df = pd.DataFrame(data)
print(df)

   one tow
a  1.0   1
b  2.0   2
c  3.0   3
d  NaN   4

numpy 创建DataFrame

pd.DataFrame(np.random.randint(60,100,size=(3,4)))  # 60-100随机选择,3行4列

   0      1     2     3
0    95    74    71    92
1    95    91    79    98
2    94    87    62    65

指定索引

pd.DataFrame(np.random.randint(60,100,size=(3,4)),index=["A","B","C"],columns=["a","b","c","d"])  # 60-100随机选择,3行4列 指定行索引和列索引

    a     b     c    d
A    91    70    63    98
B    98    68    88    96
C    99    77    86    66

DataFrame属性

  • values  取出所有值
  • columns   列索引
  • index    行索引
  • shape   当前表是几行几列
res = pd.DataFrame(np.random.randint(60,100,size=(3,4)),index=["A","B","C"],columns=["a","b","c","d"])
res.values   # 取出所有数据
res.index    # 取出行索引
res.columns  # 取出列索引
res.shape    # 显示当前数据是几行几列
============================================

练习

根据以下考试成绩表,创建一个DataFrame,命名为df:
```
    张三  李四
语文 150  0
数学 150  0
英语 150  0
理综 300  0
```

============================================
dic = {
    "张三":[150,150,150,300],
    "李四":[0,0,0,0]
}
df = pd.DataFrame(dic,index=["语文","数学","英语","理综"])
df

       张三   李四
语文    150    0
数学    150    0
英语    150    0
理综    300    0    

DataFrame 索引

列索引

(1) 对列进行索引

    - 通过类似字典的方式  df[‘q‘]
    - 通过属性的方式     df.q

 可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且name属性也已经设置好了,就是相应的列名。
res = pd.DataFrame(np.random.randint(60,100,size=(3,4)),index=["A","B","C"],columns=["a","b","c","d"])
res

      a     b    c     d
A    95    83    92    89
B    70    96    92    67
C    65    69    85    78
# 属性方式res.a
A    95
B    70
C    65
Name: a, dtype: int32
# 字典方式
res["a"]
A    95
B    70
C    65
Name: a, dtype: int32

# 修改列索引
res.columns=["aa","bb","cc","dd"]
res
     aa    bb    cc    dd
A    76    90    91    78
B    80    81    82    85
C    93    70    63    81

# 读取前两列
res[["aa","bb"]]
     aa    bb
A    76    90
B    80    81
C    93    70

行索引

- 使用.loc[]加index来进行行索引
- 使用.iloc[]加整数来进行行索引

同样返回一个Series,index为原来的columns。

演示

res = pd.DataFrame(np.random.randint(60,100,size=(3,4)),index=["A","B","C"],columns=["a","b","c","d"])
res
      a    b     c     d
A    91    83    96    75
B    88    92    91    60
C    73    79    72    79

查询

# loc方式
res.loc["A"]

a    91
b    83
c    96
d    75
Name: A, dtype: int32

# iloc方式
res.iloc[0]

a    91
b    83
c    96
d    75
Name: A, dtype: int32

res.loc[["A","B"]]

    a    b     c     d
A    95    83    92    89
B    70    96    92    67

元素索引的方法

 - 使用列索引
 - 使用行索引(iloc[3,1] or loc[‘C‘,‘q‘]) 行索引在前,列索引在后
res = pd.DataFrame(np.random.randint(60,100,size=(3,4)),index=["A","B","C"],columns=["a","b","c","d"])
res

      a     b    c     d
A    95    83    92    89
B    70    96    92    67
C    65    69    85    78    
res.iloc[2,3]  # 无论是行还是列 索引都是从0开始的  【78在表格中的2行3列的位置】

78

res.loc[["A","C"],"c"]  # 行数据取了A/C两行得数据,列取得c列的数据

A    92
C    85
Name: c, dtype: int32

DataFrame 切片

【注意】
直接用中括号时:
- 索引表示的是列索引
- 切片表示的是行切片
res = pd.DataFrame(np.random.randint(60,100,size=(3,4)),index=["A","B","C"],columns=["a","b","c","d"])
res

      a    b     c     d
A    64    60    82    97
B    64    74    63    90
C    88    68    60    71    
res[1:]   # 切片 表示的是行切片

        a    b    c    d
B    99    72    91    72
C    83    61    71    98    

res["c"]  # 索引表示的是列索引

A    82
B    63
C    60
Name: c, dtype: int32

在loc和iloc中使用切片(切列) : df.loc[‘B‘:‘C‘,‘丙‘:‘丁‘]

res.iloc[1,1:3]  # 取第二行,b-c列的数据    顾头不顾尾
b    74
c    63
Name: B, dtype: int32

res.iloc[:,1:3]  # 取所有行,b-c列数据
      b    c
A    60    82
B    74    63
C    68    60

res.loc["A":"C","b":"c"]   # 取A-C行  b-c列数据
      b    c
A    60    82
B    74    63
C    68    60

DataFrame的运算

DataFrame之间的运算

同Series一样:

- 在运算中自动对齐不同索引的数据
- 如果索引不对应,则补NaN
res = pd.DataFrame(np.random.randint(60,100,size=(3,4)),index=["A","B","C"],columns=["a","b","c","d"])
ret = pd.DataFrame(np.random.randint(60,100,size=(3,4)),index=["A","B","C"],columns=["a","b","c","f"])
res + ret

      a      b      c      d      f
A    138    174    173    NaN    NaN
B    142    168    180    NaN    NaN
C    160    156    187    NaN    NaN    

原文地址:https://www.cnblogs.com/songzhixue/p/11341838.html

时间: 2024-08-30 18:11:37

pandas入门之DataFrame的相关文章

利用Python进行数据分析——pandas入门

利用Python进行数据分析--pandas入门 基于NumPy建立的 from pandas importSeries,DataFrame,import pandas as pd 一.两种数据结构 1.Series 类似于Python的字典,有索引和值 创建Series #不指定索引,默认创建0-N In [54]: obj = Series([1,2,3,4,5]) In [55]: obj Out[55]: 0 1 1 2 2 3 3 4 4 5 dtype: int64 #指定索引 In

python之pandas入门操作

本文章是建议入门者直接上手操作,在操作中再去想为什么,是什么? --理论知识暂时不写了,可自行百度 ,跟着代码来入门,简单粗暴. import pandas as pd import numpy as np from pandas import Series,DataFrame #数据结构:Series 和DataFrame #Series 是一个定长的字典序列 定长:相当于两个ndarray #Series有两个基本属性:index和values index默认0,1,2...递增 可以自定义

pandas入门

[原]十分钟搞定pandas 本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook .习惯上,我们会按下面格式引入所需要的包: 一.            创建对象 可以通过 Data Structure Intro Setion 来查看有关该节内容的详细信息. 1.可以通过传递一个list对象来创建一个Series,pandas会默认创建整型索引: 2.通过传递一个

pandas 学习(2): pandas 数据结构之DataFrame

DataFrame 类型类似于数据库表结构的数据结构,其含有行索引和列索引,可以将DataFrame 想成是由相同索引的Series组成的Dict类型.在其底层是通过二维以及一维的数据块实现. 1.  DataFrame 对象的构建 1.1 用包含等长的列表或者是NumPy数组的字典创建DataFrame对象 In [68]: import pandas as pd In [69]: from pandas import Series,DataFrame # 建立包含等长列表的字典类型 In [

pandas入门学习--------------------------(一)

使用pandas,首先需要熟悉它的2个主要的数据结构:Series和DataFrame. Series series是一种类似于一维数组的的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(索引)组成. In [1]: from pandas import Series,DataFrame In [2]: import pandas as pd In [3]: obj=Series([4,7,-5,3]) In [4]: obj Out[4]: 0 4 1 7 2 -5 3

python数据分析pandas中的DataFrame数据清洗

pandas中的DataFrame中的空数据处理方法: 方法一:直接删除 1.查看行或列是否有空格(以下的df为DataFrame类型,axis=0,代表列,axis=1代表行,以下的返回值都是行或列索引加上布尔值)• isnull方法 • 查看行:df.isnull().any(axis=1)  • 查看列:df.isnull().any(axis=0)• notnull方法:• 查看行:df.notnull().all(axis=1)• 查看列:df.notnull().all(axis=0

短视频学习 - 15、pandas入门之数据结构-Series(1)

今日内容 # pandas入门之数据结构-Series 简介 # Series是一维标记的数组,能够保存任何数据类型(整数,字符串,浮点数,Python对象等) 常用操作 # 从ndarray实例化 (ndarray是numpy的数据结构) # 从字典实例化(先创建字典,再将字典实例化为series) # 从标量值实例化 # 将Series完全转化为numpy的ndarray,能执行大多数NumPy的函数操作 FollowMe # 实现上述具体操作 若浏览器无法显示下面视频,可点击此处观看优酷短

程序员用于机器学习编程的Python 数据处理库 pandas 入门教程

入门介绍 pandas适合于许多不同类型的数据,包括: · 具有异构类型列的表格数据,例如SQL表格或Excel数据 · 有序和无序(不一定是固定频率)时间序列数据. · 具有行列标签的任意矩阵数据(均匀类型或不同类型) · 任何其他形式的观测/统计数据集. 由于这是一个Python语言的软件包,因此需要你的机器上首先需要具备Python语言的环境.关于这一点,请自行在网络上搜索获取方法. 关于如何获取pandas请参阅官网上的说明:pandas Installation. 通常情况下,我们可以

《利用python进行数据分析》读书笔记--第五章 pandas入门

pandas是本书后续内容的首选库.pandas可以满足以下需求: 具备按轴自动或显式数据对齐功能的数据结构.这可以防止许多由于数据未对齐以及来自不同数据源(索引方式不同)的数据而导致的常见错误.. 集成时间序列功能 既能处理时间序列数据也能处理非时间序列数据的数据结构 数学运算和简约(比如对某个轴求和)可以根据不同的元数据(轴编号)执行 灵活处理缺失数据 合并及其他出现在常见数据库(例如基于SQL的)中的关系型运算 pandas数据结构介绍 两个数据结构:Series和DataFrame.Se