[数据处理与分析] Pandas 中的 DataFrame对象

创建

接收一个字典

In [1]: import pandas as pd

In [2]: dic1 = {"name": ["张三", "李四"], "age": [22, 18], "gender": ["男", "女"]}

In [3]: df1 = pd.DataFrame(dic1)

In [4]: df1
Out[4]:
  name  age gender
0   张三   221   李四   18
  • 当接受一个字典作为参数时, 字典的keys会作为表格的列标签, 表格的记录索引index (也就是横标签) 默认从0开始自增, keys对应的values会在相应的列标签下排成一列

  • 字典中至少有一个key对应的value是列表, 并且所有出现的列表都必须是相同长度

    In [5]: dic1_test = {"name": "张三", "age": 22, "gender": "男"}
    
    In [6]: df1_test = pd.DataFrame(dic1_test)
    
    ValueError: If using all scalar values, you must pass an index
    
    In [7]: dic1_test2 = {"name": ["张三", "李四"], "age": 22, "gender": ["男"]}
    
    In [8]: df1_test2 = pd.DataFrame(dic1_test2)
    
    ValueError: arrays must all be same length
    
  • 表格的index(也就是行数)默认是列表的长度, 如果字典的values中没有列表, 则必须人为指定index

    • index 是一个列表类型, 里面存放行标签, 标量的values会被自动重复相应的次数(列表的长度)

      In [10]: df1_test3 = pd.DataFrame(dic1_test, index=["a", 1, [1]])
      
      In [11]: df1_test3
      Out[11]:
          name  age gender
      a     张三   221     张三   22[1]   张三   22
  • values可以为空列表, 这样的话, 表格为空, 只有列标签, index为[]

    In [12]: dic1_test4 = {"name": "张三", "age": 22, "gender": []}
    
    In [13]: df1_test4 = pd.DataFrame(dic1_test4)
    
    In [14]: df1_test4
    Out[14]:
    Empty DataFrame
    Columns: [name, age, gender]
    Index: []
    

接收一个列表

一维列表

  • 接收一个一维列表作为参数时, 列标签 和 行标签 都是从0开始自增.
  • 每一个元素作为一条横向记录 (共同组成一个列向量)
In [19]: arr = ["张三", 22, "男"]

In [20]: df2 = pd.DataFrame(arr)

In [21]: df2
Out[21]:
    0
0  张三
1  22
2

字典列表

  • 当接受的是一个字典的列表时 , 字典的keys默认称为列标签, 依然是数组中的每一个元素作为一条横向记录 (字典)
In [35]: arr4 = [{"name": "张三", "age": 22, "gender": "男"}, {"name": "李雪", "age": 18, "gender": "女"}]

In [36]: df5 = pd.DataFrame(arr4)

In [37]: df5
Out[37]:
  name  age gender
0   张三   221   李雪   18
  • 当每个字典的keys不一样时, 会把出现的所有keys作为标签, 字典中缺少该值的默认设置为NaN
In [38]: arr5 = [{"name": "张三", "age": 22, "gender": "男"}, {"name": "李雪", "age": 18, "gen": "女"}]

In [39]: df6 = pd.DataFrame(arr5)

In [40]: df6
Out[40]:
  name  age gender  gen
0   张三   22      男  NaN
1   李雪   18    NaN    女

二维列表

  • 当接收二维列表时, 二维列表的大小就是表格的大小, 比如上例中二维列表是23, 最后输出的表格也是23, 二维列表中每一个列表元素作为一条横向记录.
  • 列标签 和 行标签 依然从0开始自增
In [22]: arr2 = [["张三", 22, "男"],["李雪", 18, "女"]]

In [23]: df3 = pd.DataFrame(arr2)

In [24]: df3
Out[24]:
    0   1  2
0  张三  221  李雪  18
  • 可以指定列标签 和 行标签 具体是什么
In [28]: df4 = pd.DataFrame(arr2, index=[1,2], columns=["姓名", "年龄", "性别"])

In [29]: df4
Out[29]:
   姓名  年龄 性别
1  张三  222  李雪  18

查询

获取某一列的所有记录

  • 返回值类型 Series
In [64]: df
Out[64]:
  name  age gender
0   张三   221   李四   182   李雪   18      女

In [65]: df['name']
Out[65]:
0    张三
1    李四
2    李雪
Name: name, dtype: object

获取某一列记录的逻辑索引

  • 返回值类型 Series
In [66]: df['age'] == 18
Out[66]:
0    False
1     True
2     True
Name: age, dtype: bool

根据逻辑索引获取指定的一整条横向记录

  • 返回值类型 DataFrame
In [67]: df[df['age']==18]
Out[67]:
  name  age gender
1   李四   182   李雪   18

获取指定列和行的元素(先列后行)

  • 返回值类型 基本类型
In [68]: df['name'][2]
Out[68]: '李雪'

根据逻辑索引获取指定的列记录

  • 返回值类型 Series
In [71]: df['name'][df['age']==18]
Out[71]:
1    李四
2    李雪
Name: name, dtype: object

获取前几行记录

In [78]: df.head(1)
Out[78]:
  name  age gender
0   张三   22      男

In [79]: df.head(2)
Out[79]:
  name  age gender
0   张三   221   李四   18

获取前几行记录

In [104]: df.tail(2)
Out[104]:
  name  age gender
2   李雪   186   田七   19

根据列 降序排序后, 获取前几行记录

In [81]: df.nlargest(1,'age')
Out[81]:
  name  age gender
0   张三   22      男

In [82]: df.nlargest(2,'age')
Out[82]:
  name  age gender
0   张三   221   李四   18

根据列 升序排序后, 获取前几行记录

In [83]: df.nsmallest(2,'age')
Out[83]:
  name  age gender
1   李四   182   李雪   18      女

In [84]: df.nsmallest(1,'age')
Out[84]:
  name  age gender
1   李四   18

将每一行记录和索引打包成一个元组放入一个迭代器中

In [93]: for item in df.iterrows():
    ...:     print(type(item))
    ...:     print(item)
    ...:
<class 'tuple'>
(0, name      张三
age       22
gender     男
Name: 0, dtype: object)
<class 'tuple'>
(1, name      李四
age       18
gender     女
Name: 1, dtype: object)
<class 'tuple'>
(2, name      李雪
age       18
gender     女
Name: 2, dtype: object)

修改

新增一行

In [100]: df.loc[6] = ["王五", 19, "男"]

In [101]: df
Out[101]:
  name  age gender
0   张三   221   李四   182   李雪   186   王五   19

官方文档

猜你喜欢

转载自blog.csdn.net/weixin_40996518/article/details/105707038