pd.DataFrame()

DataFrame 是一种二维的数据模型,相当于EXcel表格中的数据,有横竖两种坐标,横轴用columns,竖轴用index 来确定,在建立DataFrame 对象的时候,需要确定三个元素:数据,竖轴,横轴。
DataFrame既有行索引也有列索引,

import pandas as pd
import numpy as np
a = pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz'))
print(a)

1. 设置索引index

a.index = a['x']
print(a)

//可新建一个DataFrame,index设置为别的表格index
labels = pd.DataFrame(columns=['s','x'],index=a.index)
print(labels)

2. a.iloc[行位置,列位置]

通过默认生成的数字索引查询指定的数据

下面表格说明:

  • i值里的数字可以为正数也可以为负数,正数0代表第一行,1代表第2行;负数 -1代表倒数第一行,-2代表倒数第2行
方法 说明:行(列)数索引值从0开始
a.iloc[i] i值可以是数字也可以是一个数组,获取第i行数据或者行子集
a.iloc[:,j] j值可以是数字也可以是一个数组, 获取第j列数据或者列子集
a.iloc[i,j] 获取第i行第j列的值
1. a.iloc[i] 获取第i行数据或者行子集
print(a)
print(a.iloc[0]) #获取第一行数据

print(a.iloc[:2]) #获取第一行和第二行

print(a.iloc[1:]) #获取第二行到最后一行的数据

print(a.iloc[[0,-1]]) #获取第一行和倒数第一行数据

2. a.iloc[:,j] 获取第j列数据或者列子集
print(a.iloc(:,0) #获取第0列数据

print(a.iloc[:,[0,1]]) #获取第一列和第二列数据

print(a.iloc[:,:2]) #获取第一列和第2列

3. a.iloc[i,j] 获取第i行第j列的值
print.iloc(-1,0) #获取倒数第一行第一列数据,即 12
print(a.iloc[1,[0,1]]) #获取第2行,第一二列数据

print(a.iloc[[0,1],2]) #获取第一二行第3列数据

print(a.iloc[[0,1],[1,2]]) #获取第一二行的第二三列数据

3. 将Pandas中的DataFrame类型转换成Numpy中array类

在用pandas包和numpy包对数据进行分析和计算时,经常用到DataFrame和array类型的数据。在对DataFrame类型的数据进行处理时,需要将其转换成array类型

1.a.values
import numpy as np
import pandas as pdprint(a.values)
print(a['w'].values)

2.使用numpy中的array方法
print(np.array(a))
print(np.array(a['w']))

4. pandas使用sort_index排序

DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’, sort_remaining=True, ignore_index=False, key=None)[source]
sort_index文档
axis:0按照行名排序;1按照列名排序
level:默认None,否则按照给定的level顺序排列—貌似并不是,文档
ascending:默认True升序排列;False降序排列
inplace:默认False,否则排序之后的数据直接替换原来的数据框
kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。似乎不用太关心。
na_position:缺失值默认排在最后{“first”,“last”}
by:按照某一列或几列数据进行排序,但是by参数貌似不建议使用

  1. x.sort_index() 默认参数ascending=True 对行index升序排列
c = pd.DataFrame(np.arange(16).reshape(4,4),index=list('adbc'),columns=list('wxyz'))
print(c['w'].sort_index()) #原本index为adbc,对index排序后变成abcd

c = pd.DataFrame(np.arange(16).reshape(4,4),index=list('adbc'),columns=list('wxyz'))
print(c)
c.sort_index(ascending=True,inplace=True)
print(c) #inplace=True,这时候c被修改了

  1. x.sort_index(ascending=False)对行index降序排列
print(c['w'].sort_index(ascending=False))


3. 对列columns排序
默认axis=0,对行index排序,axis=1对列index排行

d = pd.DataFrame(np.arange(16).reshape(4,4),index=list('adbc'),columns=list('zwyx'))
print(d)
print(d.sort_index(axis=1)) # 原本列columns为zwyx, 对列columns排序后变成wxyz

  1. 对列columns降序排列
print(d.sort_index(axis=1,ascending=False))  # 原本列columns为zwyx, 对列columns排序后变成zyxw

5. pandas中的rolling函数用于移动计算

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None, method=‘single’)
rolling文档

window: 也可以省略不写。表示时间窗的大小,注意有两种形式(int or offset)。如果使用int,则数值表示计算统计量的观测值的数量即向前几个数据。如果是offset类型,表示时间窗的大小。、min_periods:每个窗口最少包含的观测值数量,小于这个值的窗口结果为NA。值可以是int,默认None。offset情况下,默认为1。
center参数,默认为False,表示当前元素往上选,加上本身总共筛选3个。
center参数,默认为True,表示以当前元素为中心,从个方向进行筛选。
win_type: 窗口的类型。截取窗的各种函数。字符串类型,默认为None。各种类型
on: 可选参数。对于dataframe而言,指定要计算滚动窗口的列。值为列名。
axis: int、字符串,默认为0,即对列进行计算
closed:定义区间的开闭,支持int类型的window。对于offset类型默认是左开右闭的即默认为right。可以根据情况指定为left both等。

print(d)
print(d['w'].rolling(3).sum()) #相当于创建了一个长度为3的窗口,窗口从上到下依次滑动,当前行加上前2行数据的总和

print(d['w'].rolling(3,center=True).sum())

6.pandas的填充缺失值fillna()

在数据集里面的缺失值需要填充起来,避免各种出错,在做分析的时候,我们经常要将缺失值填充为前一个值,或者是后一个值。

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)[source]

参数 说明
method 取值 : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None
pad/ffill:用前一个非缺失值去填充该缺失值
backfill/bfill:用下一个非缺失值填充该缺失值
None:指定一个值去替换缺失值(缺省默认这种方式)
inplace False 创建一个副本,修改副本,原对象不变(缺省默认)
True 直接修改原对象
axis 默认是纵向填充的;1是左右横向填充的

fillna文档

import pandas as pd
import numpy as np
from numpy import nan as NaNdf1=pd.DataFrame([[1,2,3],[NaN,NaN,2],[NaN,NaN,NaN],[8,8,NaN]])
print(df1)

1.用常数填充
print(df1.fillna(100)) # 将所有NaN替换成100

2.用字典填充
print(df1.fillna({0:10,1:20,2:30})) # 将columns为0的所有NaN填充10,为1列的所有NaN填充20,为2列的所有NaN填充30

3.用前一个非缺失值去填充
print(df1.fillna(method='ffill')) #用前一个非缺失值去填充该缺失值

4.用后一个非缺失值去填充
print(df1.fillna(method='bfill')) #用后一个非缺失值去填充该缺失值

7.pandas中的where()

where文档
DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None, errors=‘raise’, try_cast=NoDefault.no_default)
cond :条件判断
other: 条件cond为False时,将值替换为other

import pandas as pd
import numpy as npdf1=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])
print(df1)

print(df1.where(df1!=1,100)) #条件判断为False的值替换为100,即值为1的替换成100

8. pandas.DataFrame.copy

DataFrame.copy文档

DateFrame.copy(deep=True) :复制object的索引和数据

  • 当deep=True时(默认), 会创建一个新的对象进行拷贝. 修改这份拷贝不会对原有对象产生影响.
  • 当deep=False时, 新的对象只是原有对象的references. 任何对新对象的改变都会影响到原有对象
a = pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz'))# b = pd.DataFrame(np.array([33,11,22,44]),index=list('adbc'),columns=['m'])
print(a)p = a.iloc[2:]
p.index = a.iloc[:2].index
print(p)

p.iloc[:2] = p - 1
print(p)
print(a) #可以看到a的后2行也被修改了

上面操作可以看到修改p后a也被修改了,因此我们可以用DateFrame.copy(deep=True) 复制索引和数据。

a = pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz'))# b = pd.DataFrame(np.array([33,11,22,44]),index=list('adbc'),columns=['m'])
print(a)p = a.iloc[2:].copy(deep=True)
p.index = a.iloc[:2].index
p.iloc[:2] = p - 1
print(p)
print(a)  #此时a没有变化

pandas中的DataFrame数据结构相关推荐

  1. Python数据处理库pandas中的DataFrame数据结构简介

    pandas 中有两大 数据结构 Series和 DataFrame. 本文主要介绍DataFrame的用法.DataFrame可以处理 表格数据. Series介绍在 Python数据处理库pand ...

  2. python列表按照指定顺序排序-pandas中的DataFrame按指定顺序输出所有列的方法

    问题: 输出新建的DataFrame对象时,DataFrame中各列的显示顺序和DataFrame定义中的顺序不一致. 例如: import pandas as pd grades = [48,99, ...

  3. Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片、相互转换

    Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片.相互转换 目录 numpy中的array格式数据切片与pandas中的dataframe ...

  4. pandas 选取第一行_用pandas中的DataFrame时选取行或列的方法

    如下所示: import numpy as np import pandas as pd from pandas import Sereis, DataFrame ser = Series(np.ar ...

  5. 问题:使用pandas中的DataFrame写入csv文件多出一行unnamed,如何解决呢??

    问题:使用pandas中的DataFrame写入csv文件多出一行unnamed,如何解决呢?? 参考文章: (1)问题:使用pandas中的DataFrame写入csv文件多出一行unnamed,如 ...

  6. 根据列值删除Pandas中的DataFrame行

    本文翻译自:Deleting DataFrame row in Pandas based on column value I have the following DataFrame: 我有以下Dat ...

  7. python怎么选取不连续的列_用pandas中的DataFrame时选取行或列的方法

    如下所示: import numpy as np import pandas as pd from pandas import Sereis, DataFrame ser = Series(np.ar ...

  8. python中的iloc函数_详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据

    pandas的DataFrame对象,本质上是二维矩阵,跟常规二维矩阵的差别在于前者额外指定了每一行和每一列的名称.这样内部数据抽取既可以用"行列名称(对应.loc[]方法)",也 ...

  9. 【DS with Python】 Pandas中Series DataFrame的结构、创建、查询、修改语法与实例

    文章目录 前言 一.Series结构与应用 1.1 Series的构造 1.2 创建Series 1.2.1 可用于创建Series的类型 1.2.2 三种设置index的方法 1.2.3 Serie ...

最新文章

  1. oracle 记录被另一个用户锁住
  2. SAP UI5库对浏览器类型检测的实现
  3. 2018杭州云栖大会,梁胜博士的演讲PPT来啦!
  4. 华为鸿蒙系统适应手机,魅族宣布接入鸿蒙生态,成为国内首家积极响应并支持华为的国内厂商...
  5. [pthon]模块 time
  6. Iptables基本概念及应用
  7. 妙用javascript
  8. 一款JAVA微信小程序商城源码,带完整后台【运行版】
  9. 白话空间统计二十四:地理加权回归(二)
  10. zotero文献管理高级操作|解决文献条目题录元数据一键更新问题
  11. 二项分布的期望方差证明_二项分布与负二项分布的均值与方差推导
  12. [转]采购订单或采购申请审批状态为IN PROCESS的解决方法
  13. 专科转行学java_IT技术学费昂贵,大专生转行学IT有必要去培训班吗
  14. 北京医保定点医院2022年版
  15. 做程序员久了,你会不会感觉的空虚与迷茫?其实主要原因是这几点!
  16. 在eclipes 中配置python
  17. 桌面图标右键反应慢,至少30s左右出现菜单
  18. 从零开始搭建oj(ubuntu)
  19. 第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛H
  20. 2021年江西省安全员B证考试资料及江西省安全员B证考试总结

热门文章

  1. Python 实现有道翻译命令行版
  2. Python入门100题 | 第070题
  3. Python100入门题 | 第001题
  4. np.expand_dims()介绍
  5. python中的路径问题汇总
  6. bin二进制文件的运行
  7. 【LeetCode从零单排】No38.CountAndSay
  8. linux下source insight安装以及打开
  9. 有赞客户行为收集与实时处理系统设计
  10. Guide: Solr performance tuning--转载