博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pandas入门之DataFrame
阅读量:5072 次
发布时间:2019-06-12

本文共 6022 字,大约阅读时间需要 20 分钟。

创建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)   00  11  22  33  44  5

列表套列表

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

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

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

指定索引

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

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

# 字典列表可作为输入数据传递以用来创建数据帧(DataFrame),data = [{
'a': 1, 'b': 2},{
'a': 5, 'b': 10, 'c': 20}] # 字典键默认为列名,没有值得为NaNdf = pd.DataFrame(data,index=["first","second"]) # 自定义行索引print(df) a b cfirst 1 2 NaNsecond 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 gender1 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 towa  1.0   1b  2.0   2c  3.0   3d  NaN   4

numpy 创建DataFrame

pd.DataFrame(np.random.randint(60,100,size=(3,4)))  # 60-100随机选择,3行4列   0      1     2     30    95    74    71    921    95    91    79    982    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    dA    91    70    63    98B    98    68    88    96C    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     dA    95    83    92    89B    70    96    92    67C    65    69    85    78
# 属性方式 res.aA    95B    70C    65Name: a, dtype: int32 # 字典方式res["a"]A    95B    70C    65Name: a, dtype: int32# 修改列索引res.columns=["aa","bb","cc","dd"]res     aa    bb    cc    ddA    76    90    91    78B    80    81    82    85C    93    70    63    81# 读取前两列res[["aa","bb"]]     aa    bbA    76    90B    80    81C    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     dA    91    83    96    75B    88    92    91    60C    73    79    72    79

查询

# loc方式res.loc["A"]a    91b    83c    96d    75Name: A, dtype: int32# iloc方式res.iloc[0]a    91b    83c    96d    75Name: A, dtype: int32res.loc[["A","B"]]    a    b     c     dA    95    83    92    89B    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     dA    95    83    92    89B    70    96    92    67C    65    69    85    78
res.iloc[2,3]  # 无论是行还是列 索引都是从0开始的  【78在表格中的2行3列的位置】78res.loc[["A","C"],"c"]  # 行数据取了A/C两行得数据,列取得c列的数据A    92C    85Name: 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     dA    64    60    82    97B    64    74    63    90C    88    68    60    71
res[1:]   # 切片 表示的是行切片        a    b    c    dB    99    72    91    72C    83    61    71    98    res["c"]  # 索引表示的是列索引A    82B    63C    60Name: c, dtype: int32

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

res.iloc[1,1:3]  # 取第二行,b-c列的数据    顾头不顾尾b    74c    63Name: B, dtype: int32res.iloc[:,1:3]  # 取所有行,b-c列数据      b    cA    60    82B    74    63C    68    60res.loc["A":"C","b":"c"]   # 取A-C行  b-c列数据      b    cA    60    82B    74    63C    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      fA    138    174    173    NaN    NaNB    142    168    180    NaN    NaNC    160    156    187    NaN    NaN

 

转载于:https://www.cnblogs.com/songzhixue/p/11341838.html

你可能感兴趣的文章
[bzoj3505][CQOI2014]数三角形_组合数学
查看>>
Python selenium 三种等待方法
查看>>
正则表达式
查看>>
Codeforces 1120 简要题解
查看>>
【Gamma阶段】第四次Scrum Meeting
查看>>
第二章学习小结
查看>>
Loading Cargo
查看>>
人生最重要的十个健康伴侣
查看>>
求救vista ultimate下如何安装vs 2008?
查看>>
使用JavaScript访问XML数据
查看>>
A Neural Probabilistic Language Model
查看>>
使用Selenium必会之技能,xpath 定位元素
查看>>
__AFO
查看>>
XML EXtensible Markup Language
查看>>
C++分布式实时应用框架——系统管理模块
查看>>
Linux下读取RFID卡号(C串口编程)
查看>>
Android PopupWindow 弹窗背景半透明,设置最大高度
查看>>
2018 Multi-University Training Contest 1 - Distinct Values
查看>>
awesome-javascript
查看>>
ArcGIS Engine -- 常用方法
查看>>