(六)Python:Pandas中的DataFrame

目录

基本特征

创建

自动生成行索引

自定义生成行索引

使用

索引与值

基本操作

统计功能 


基本特征

  • 一个表格型的数据结构
  • 含有一组有序的列(类似于index)
  • 大致可看成共享同一个index的Series集合

创建

        DataFrame与Series相比,除了可以每一个键对应许多值之外,还增加了列索引(columns)这一内容,具体内容如下所示:

自动生成行索引

        DataFrame也能自动生成行索引,索引从0开始,代码如下所示:

import pandas as pd

data = {'name': ['aaaaaa', 'bbbbbb', 'cccccc'], 'pay': [4000, 5000, 6000]}  # 以name和pay为列索引,创建DataFrame
frame = pd.DataFrame(data)  #自定义行索引
print(frame)

运行结果如下所示:

    name      pay
0  aaaaaa  4000
1  bbbbbb  5000
2  cccccc   6000

自定义生成行索引

       DataFrame除了能创建自动生成行索引外,还能自定义生成行索引,代码如下所示: 

import pandas as pd
import numpy as np

data = np.array([('aaaa', 4000), ('bbbb', 5000), ('cccc', 6000)])
frame = pd.DataFrame(data, index=range(1, 4), columns=['name', 'pay'])  # 自定义列索引
print(frame)

运行结果如下所示:

 name   pay
1  aaaa  4000
2  bbbb  5000
3  cccc  6000

使用

索引与值

                我们可以通过一些基本方法来查看DataFrame的行索引、列索引和值,代码如下所示:

import pandas as pd
import numpy as np

data = np.array([('aaaa', 4000), ('bbbb', 5000), ('cccc', 6000)])
frame = pd.DataFrame(data, index=range(1, 4), columns=['name', 'pay'])

print(frame.columns)    # 输出列索引
print(frame.index)      # 输出行索引
print(frame.values)     # 输出值

运行结果如下所示:

行索引

Index(['name', 'pay'], dtype='object')

列索引
RangeIndex(start=1, stop=4, step=1)


[['aaaa' '4000']
 ['bbbb' '5000']
 ['cccc' '6000']]

        除了进行查看,我们还能简单的对行索引和列索引进行修改,具体代码如下所示:

import pandas as pd
import numpy as np

data = np.array([('aaaa', 4000), ('bbbb', 5000), ('cccc', 6000)])
frame = pd.DataFrame(data, index=range(1, 4), columns=['name', 'pay'])
print(frame)

frame.columns = ['newname', 'newpay']
frame.index = range(2, 5)
print("---------------")
print(frame)
print("---------------")
print(frame.columns)    # 修改后的列索引
print(frame.index)      # 修改后的行索引

运行结果如下所示:

   name   pay
1  aaaa  4000
2  bbbb  5000
3  cccc  6000
---------------
  newname newpay
2    aaaa   4000
3    bbbb   5000
4    cccc   6000
---------------
Index(['newname', 'newpay'], dtype='object')
RangeIndex(start=2, stop=5, step=1)

基本操作

  • 取DataFrame对象的列和行可获得Series

         具体实现如下代码所示:

import pandas as pd
import numpy as np

data = np.array([('xiaoming', 4000, 1), ('xiaohong', 5000, 2), ('xiaolan', 6000, 3)])
frame = pd.DataFrame(data, index=range(1, 4), columns=['name', 'pay', 'a'])
print(frame['name'])        # 取得某列
print(frame.pay)            # 取得某列
print(frame.iloc[1:3, 1])   # 第一行和第二行的第一列
print(frame.iloc[0:2, 0])   # 第零行和第一行的第零列(第一个0可省略)
print(frame.iloc[0:2])      # 少了第二个参数,就会输出所有列
print(frame.iloc[0:2, 1:3]) # 逗号左边操控行,右边操控列

运行结果如下所示:

取得name列

1    xiaoming
2    xiaohong
3     xiaolan
Name: name, dtype: object

取得pay列
1    4000
2    5000
3    6000
Name: pay, dtype: object

取得第一行和第二行的第一列
2    5000
3    6000
Name: pay, dtype: object

取得第零行和第一行的第零列
1    xiaoming
2    xiaohong
Name: name, dtype: object

少了第二个参数,就会输出所有列
       name   pay  a
1  xiaoming  4000  1
2  xiaohong  5000  2

逗号左边操控行,右边操控列
    pay  a
1  4000  1
2  5000  2

  •  DataFrame对象的修改和删除 

         具体代码如下所示:

import pandas as pd
import numpy as np

data = np.array([('xiaoming', 4000, 1), ('xiaohong', 5000, 2), ('xiaolan', 6000, 3)])
frame = pd.DataFrame(data, index=range(1, 4), columns=['name', 'pay', 'a'])
frame['name'] = 'admin'     # 将name一列全部换成admin
print(frame)
del frame['pay']            # 将pay一列全部删除
print(frame)
print(frame.drop(1, axis=0))    # 删除第一行
print(frame.drop(index=2))      # 另一种删除方法

运行结果如下所示:

将name一列全部换成admin

name   pay  a
1  admin  4000  1
2  admin  5000  2
3  admin  6000  3

将pay一列全部删除
    name  a
1  admin  1
2  admin  2
3  admin  3

删除第一行
    name  a
2  admin  2
3  admin  3

另一种删除方法
    name  a
1  admin  1
3  admin  3

(1)添加列

        添加列可直接赋值,例如给 aDF 中添加 tax 列的方法如下:

import pandas as pd
import numpy as np

data = np.array([('xiaoming', 4000), ('xiaohong', 5000), ('xiaolan', 6000)])
aDF = pd.DataFrame(data, index=range(1, 4), columns=['name', 'pay'])
print(aDF)
print("===============================")
aDF['tax'] = [0.05, 0.05, 0.1]        # 添加列
print(aDF)

运行结果如下所示:

      name   pay
1  xiaoming  4000
2  xiaohong  5000
3   xiaolan  6000
===============================
       name   pay   tax
1  xiaoming  4000  0.05
2  xiaohong  5000  0.05
3   xiaolan  6000  0.10

(2)添加行

        添加行可用对象的标签(loc)和位置(iloc)索引,也可通过 append()方法或 concat()函数等进行处理,以 loc 为例,例如要给 aDF 添加一个新行,可用如下方法:

import pandas as pd
import numpy as np

data = np.array([('xiaoming', 4000), ('xiaohong', 5000), ('xiaolan', 6000)])
aDF = pd.DataFrame(data, index=range(1, 4), columns=['name', 'pay'])
print(aDF)
print("===============================")
aDF['tax'] = [0.05, 0.05, 0.1]        # 添加列
aDF.loc[5] = {'name': 'Liuxi', 'pay': 5000, 'tax': 0.05}    # 添加行
print(aDF)

运行结果如下所示:

       name   pay
1  xiaoming  4000
2  xiaohong  5000
3   xiaolan  6000
===============================
       name   pay   tax
1  xiaoming  4000  0.05
2  xiaohong  5000  0.05
3   xiaolan  6000  0.10
5     Liuxi  5000  0.05

(3)删除行

        删除数据可直接用“del 数据”的方式进行,但这种方式是直接对原始数据操作,不是很安全,pandas 中可利用 drop()方法删除指定轴上的数据,drop()方法返回一个新的对象,不会直接修改原始数据。

import pandas as pd
import numpy as np

data = np.array([('xiaoming', 4000), ('xiaohong', 5000), ('xiaolan', 6000)])
aDF = pd.DataFrame(data, index=range(1, 4), columns=['name', 'pay'])
aDF['tax'] = [0.05, 0.05, 0.1]
aDF.loc[5] = {'name': 'Liuxi', 'pay': 5000, 'tax': 0.05}
print(aDF)
print("===============================")
print(aDF.drop(5))  # 返回删除第5行的数据,但本身未改变
print("===============================")
print(aDF)          # 自身未改变

运行结果如下所示:

       name   pay   tax
1  xiaoming  4000  0.05
2  xiaohong  5000  0.05
3   xiaolan  6000  0.10
5     Liuxi  5000  0.05
===============================
       name   pay   tax
1  xiaoming  4000  0.05
2  xiaohong  5000  0.05
3   xiaolan  6000  0.10
===============================
       name   pay   tax
1  xiaoming  4000  0.05
2  xiaohong  5000  0.05
3   xiaolan  6000  0.10
5     Liuxi  5000  0.05

(3)删除列

代码如下:

import pandas as pd
import numpy as np

data = np.array([('xiaoming', 4000), ('xiaohong', 5000), ('xiaolan', 6000)])
aDF = pd.DataFrame(data, index=range(1, 4), columns=['name', 'pay'])
aDF['tax'] = [0.05, 0.05, 0.1]
aDF.loc[5] = {'name': 'Liuxi', 'pay': 5000, 'tax': 0.05}
print(aDF)
print("===============================")
print(aDF.drop('tax', axis=1))
print("===============================")
print(aDF)      # 自身未改变

运行结果如下所示:

      name   pay   tax
1  xiaoming  4000  0.05
2  xiaohong  5000  0.05
3   xiaolan  6000  0.10
5     Liuxi  5000  0.05
===============================
       name   pay
1  xiaoming  4000
2  xiaohong  5000
3   xiaolan  6000
5     Liuxi  5000
===============================
       name   pay   tax
1  xiaoming  4000  0.05
2  xiaohong  5000  0.05
3   xiaolan  6000  0.10
5     Liuxi  5000  0.05

通过修改参数的值,可以改变原来的数据,代码如下:

import pandas as pd
import numpy as np

data = np.array([('xiaoming', 4000), ('xiaohong', 5000), ('xiaolan', 6000)])
aDF = pd.DataFrame(data, index=range(1, 4), columns=['name', 'pay'])
aDF['tax'] = [0.05, 0.05, 0.1]
aDF.loc[5] = {'name': 'Liuxi', 'pay': 5000, 'tax': 0.05}
print(aDF)
print("===============================")
aDF.drop('tax', axis=1, inplace=True)
print(aDF)      # 自身改变

运行结果如下所示:

       name   pay   tax
1  xiaoming  4000  0.05
2  xiaohong  5000  0.05
3   xiaolan  6000  0.10
5     Liuxi  5000  0.05
===============================
       name   pay
1  xiaoming  4000
2  xiaohong  5000
3   xiaolan  6000
5     Liuxi  5000

(4)修改

import pandas as pd
import numpy as np

data = np.array([('xiaoming', 4000), ('xiaohong', 5000), ('xiaolan', 6000)])
aDF = pd.DataFrame(data, index=range(1, 4), columns=['name', 'pay'])
aDF['tax'] = [0.05, 0.05, 0.1]
aDF.loc[5] = {'name': 'Liuxi', 'pay': 5000, 'tax': 0.05}
print(aDF)
print("===============================")
aDF['tax'] = 0.03  # 将一列修改为相同的值
print(aDF)
print("===============================")
aDF.loc[5] = ['Liuxi', 9800, 0.05]  # 修改某一行
print(aDF)
print("===============================")
print(aDF.loc[:, ['name', 'tax', 'pay']])  # 交换列
print("===============================")
print(aDF.iloc[:, [0, 2, 1]])   # 交换列

运行结果如下所示:

       name   pay   tax
1  xiaoming  4000  0.05
2  xiaohong  5000  0.05
3   xiaolan  6000  0.10
5     Liuxi  5000  0.05
===============================

将一列修改为相同的值

       name   pay   tax
1  xiaoming  4000  0.03
2  xiaohong  5000  0.03
3   xiaolan  6000  0.03
5     Liuxi  5000  0.03
===============================

修改某一行

       name   pay   tax
1  xiaoming  4000  0.03
2  xiaohong  5000  0.03
3   xiaolan  6000  0.03
5     Liuxi  9800  0.05
===============================

交换列

       name   tax   pay
1  xiaoming  0.03  4000
2  xiaohong  0.03  5000
3   xiaolan  0.03  6000
5     Liuxi  0.05  9800
===============================

交换列
       name   tax   pay
1  xiaoming  0.03  4000
2  xiaohong  0.03  5000
3   xiaolan  0.03  6000
5     Liuxi  0.05  9800

: DataFrame对象的修改和删除还有很多方法,在此不一一列举,有兴趣的同学可以自己去找一下

统计功能 

  • DataFrame对象成员找最低工资和高工资人群信息

         DataFrame有非常强大的统计功能,它有大量的函数可以使用,具体代码如下所示:

import pandas as pd
import numpy as np

data = np.array([('xiaoming', 4000, 1), ('xiaohong', 5000, 2), ('xiaolan', 6000, 3)])
frame = pd.DataFrame(data, index=range(1, 4), columns=['name', 'pay', 'a'])
print(frame.pay.min())      # 取得最小值
print(frame[frame.pay >='5000'])    # 找出工资>=5000人员的信息

运行结果如下所示:

工资最低值

4000

工资>=5000人员的信息
       name   pay  a
2  xiaohong  5000  2
3   xiaolan  6000  3

未完待续

你可能感兴趣的:(Python笔记,python)