100天精通Python(数据分析篇)——第55天:Pandas之DataFrame对象大总结

Posted 无 羡ღ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了100天精通Python(数据分析篇)——第55天:Pandas之DataFrame对象大总结相关的知识,希望对你有一定的参考价值。

文章目录

每篇前言

  • 🏆🏆作者介绍:Python领域优质创作者、华为云享专家、阿里云专家博主、2021年CSDN博客新星Top6

  • 🔥🔥本文已收录于Python全栈系列专栏《100天精通Python从入门到就业》
  • 📝​📝​此专栏文章是专门针对Python零基础小白所准备的一套完整教学,从0到100的不断进阶深入的学习,各知识点环环相扣
  • 🎉🎉订阅专栏后续可以阅读Python从入门到就业100篇文章还可私聊进两百人Python全栈交流群(手把手教学,问题解答); 进群可领取80GPython全栈教程视频 + 300本计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
  • 🚀🚀加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!


一、什么是DataFrame?

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同类型的值。DataFrame既有行索引也有列索引,它可以被看做是由Series组成的字典(共用同一个索引),数据是以二维结构存放的。

  • 类似多维数组/表格数据 (如,excel, R中的data.frame)
  • 每列数据可以是不同的类型
  • 索引包括列索引和行索引

二、创建DataFrame对象

DataFrame 构造方法如下:

pandas.DataFrame( data, index, columns, dtype, copy)

参数说明:

  • data:一组数据(ndarray、series, map, lists, dict 等类型)。

  • index:索引值,或者可以称为行标签。

  • columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。

  • dtype:数据类型。

  • copy:拷贝数据,默认为 False。

1. list列表构建DataFrame

1)通过单列表创建

>>> import pandas as pd
>>>
>>> data = [0, 1, 2, 3, 4, 5]
>>> df = pd.DataFrame(data)
>>> print(df)
   0
0  0
1  1
2  2
3  3
4  4
5  5
>>> print(type(df))
<class 'pandas.core.frame.DataFrame'>

2)通过嵌套列表创建

>>> import pandas as pd
>>>
>>> data = [['小明', 20], ['小红', 10]]
>>> df = pd.DataFrame(data, columns=['name', 'age'], dtype=float)
sys:1: FutureWarning: Could not cast to float64, falling back to object. This behavior is deprecated. In a future version, when a dtype is passed to 'DataFrame', either all columns will be cast to that dtype, or a TypeError will be raised
>>> print(df)
  name   age
0   小明  20.0
1   小红  10.0
>>> print(type(df))
<class 'pandas.core.frame.DataFrame'>

3)列表中嵌套字典(字典的键被用作列名,缺失则赋值为NaN):

>>> import pandas as pd
>>>
>>> data = ['A': 1, 'B': 2, 'A': 3, 'B': 4, 'C': 5]
>>> df = pd.DataFrame(data)
>>> print(df)
   A  B    C
0  1  2  NaN
1  3  4  5.0
>>> print(type(df))
<class 'pandas.core.frame.DataFrame'>

2. dict字典构建DataFrame

使用 dict 创建,dict中列表的长度必须相同, 如果传递了index,则索引的长度应等于数组的长度。如果没有传递索引,则默认情况下,索引将是range(n),其中n是数组长度。

1)普通创建:

>>> import pandas as pd
>>>
>>> data = 'name': ['小红', '小明', '小白'], 'age': [10, 20, 30]
>>> df = pd.DataFrame(data)
>>> print(df)
  name  age
0   小红   10
1   小明   20
2   小白   30
>>> print(type(df))
<class 'pandas.core.frame.DataFrame'>

2)设置index创建:

>>> import pandas as pd
>>>
>>> data = 'name': ['小红', '小明', '小白'], 'age': [10, 20, 30]
>>> df = pd.DataFrame(data, index=['老三', '老二', '老大'])
>>> print(df)
   name  age
老三   小红   10
老二   小明   20
老大   小白   30
>>> print(type(df))
<class 'pandas.core.frame.DataFrame'>

3. ndarray创建DataFrame

1)普通方式创建:

>>> import pandas as pd
>>> import numpy as np
>>>
>>> data = np.random.randn(3, 3)
>>> print(data)
[[-1.9332579   0.70876382 -0.44291914]
 [-0.26228642 -1.05200338  0.57390067]
 [-0.49433001  0.70472595 -0.50749279]]
>>> print(type(data))
<class 'numpy.ndarray'>
>>> df = pd.DataFrame(data)
>>> print(df)
          0         1         2
0 -1.933258  0.708764 -0.442919
1 -0.262286 -1.052003  0.573901
2 -0.494330  0.704726 -0.507493
>>> print(type(df))
<class 'pandas.core.frame.DataFrame'>

2)设置列名创建:

>>> import pandas as pd
>>> import numpy as np
>>>
>>> data = np.random.randn(3, 3)
>>> print(data)
[[-0.22028147  0.62374794 -0.66210282]
 [-0.71785439 -1.21004547  1.15663811]
 [ 1.47843923  0.4385811   0.31931312]]
>>> print(type(data))
<class 'numpy.ndarray'>
>>> df = pd.DataFrame(data, columns=list("ABC"))
>>> print(df)
          A         B         C
0 -0.220281  0.623748 -0.662103
1 -0.717854 -1.210045  1.156638
2  1.478439  0.438581  0.319313
>>> print(type(df))
<class 'pandas.core.frame.DataFrame'>

4. Series创建DataFrame

>>> import pandas as pd
>>>
>>> data = 'A': pd.Series(1, index=list(range(4)), dtype='float32'),
...         'B': pd.Series(2, index=list(range(4)), dtype='float32'),
...         'C': pd.Series(3, index=list(range(4)), dtype='float32')
...         
>>> df = pd.DataFrame(data)
>>> print(df)
     A    B    C
0  1.0  2.0  3.0
1  1.0  2.0  3.0
2  1.0  2.0  3.0
3  1.0  2.0  3.0
>>> print(type(df))
<class 'pandas.core.frame.DataFrame'>

三、列索引操作

创建DataFrame对象:

>>> import pandas as pd
>>>
>>> df_obj = pd.DataFrame(np.random.randn(5, 4), columns=['a', 'b', 'c', 'd'])
>>> print(df_obj.head())
          a         b         c         d
0  0.781380 -1.074496 -1.448204 -0.313385
1 -0.568288  2.011669  0.955440  1.617713
2  0.222755 -1.507924 -0.903779  1.301956
3  0.706442 -0.503069 -1.561416 -0.290718
4 -1.071889 -0.280071 -2.033153  1.618598

1. 读取单列

>>> # 列索引
>>> print(df_obj['a'])  
0    0.781380
1   -0.568288
2    0.222755
3    0.706442
4   -1.071889
Name: a, dtype: float64
>>> print(type(df_obj['a'])) # 返回Series类型
<class 'pandas.core.series.Series'>

2. 读取不连续索引

>>> # 不连续索引
>>> print(df_obj[['a', 'c']])
          a         c
0  0.237575 -1.931997
1  0.294029 -0.513547
2  0.151643 -0.397062
3  0.481416  0.717808
4 -0.139943 -0.221828

3. 添加新列

1)直接赋值操作:

>>> df_obj['e'] = pd.Series([10, 20, 30, 40, 50])
>>> print(df_obj)
          a         b         c         d   e
0  0.237575  0.396866 -1.931997 -0.821513  10
1  0.294029 -0.943375 -0.513547  0.186539  20
2  0.151643  0.900406 -0.397062 -1.136502  30
3  0.481416 -0.004957  0.717808 -1.020731  40
4 -0.139943 -0.844997 -0.221828  2.186861  50

2) insert(索引位置,column='列名',value='值') 方法插入新列:

>>> df_obj.insert(1, column='f', value=[10, 20, 30, 40, 50])  # 插入一列为不同数据
>>> print(df_obj)
          a   f         b         c         d   e
0  1.520003  10  0.375014  0.059027  1.171379  10
1  0.099122  20  0.096940 -0.189679 -0.046981  20
2 -2.270308  30 -0.759622  0.660129 -1.017288  30
3  2.010634  40  1.456483 -0.741796 -0.280938  40
4  2.120968  50  1.077172 -1.616609 -1.069243  50
>>> df_obj.insert(1, column='g', value=111)  # 插入一列为相同数据
>>> print(df_obj)
          a    g   f         b         c         d   e
0  1.520003  111  10  0.375014  0.059027  1.171379  10
1  0.099122  111  20  0.096940 -0.189679 -0.046981  20
2 -2.270308  111  30 -0.759622  0.660129 -1.017288  30
3  2.010634  111  40  1.456483 -0.741796 -0.280938  40
4  2.120968  111  50  1.077172 -1.616609 -1.069243  50

4. 删除列

del() 和 pop()方法都可以删除列

>>> del df_obj['f']
>>> print(df_obj)
          a    g         b         c         d   e
0  1.520003  111  0.375014  0.059027  1.171379  10
1  0.099122  111  0.096940 -0.189679 -0.046981  20
2 -2.270308  111 -0.759622  0.660129 -1.017288  30
3  2.010634  111  1.456483 -0.741796 -0.280938  40
4  2.120968  111  1.077172 -1.616609 -1.069243  50
>>> df_obj.pop('g')
0    111
1    111
2    111
3    111
4    111
Name: g, dtype: int64
>>> print(df_obj)
          a         b         c         d   e
0  1.520003  0.375014  0.059027  1.171379  10
1  0.099122  0.096940 -0.189679 -0.046981  20
2 -2.270308 -0.759622  0.660129 -1.017288  30
3  2.010634  1.456483 -0.741796 -0.280938  40
4  2.120968  1.077172 -1.616609 -1.069243  50

四、索引读取数据操作

1. 标签索引

DataFrame 不能直接切片,可以通过loc来做切片。 loc是基于标签名的索引,也就是我们自定义的索引名

>>> # 第一个参数索引行,第二个参数是列
>>> print(df_obj.loc[0:2, 'a'])
0    0.237575
1    0.294029
2    0.151643
Name: a, dtype: float64

2. 位置索引

作用和loc一样,不过是基于索引编号来索引

>>> print(df_obj.iloc[0:2, 0]) 
0    0.237575
1    0.294029
Name: a, dtype: float64

注意:和df_obj.loc[0:2, ‘a’]的区别,iloc是左闭右开

3. 切片索引

>>> print(df_obj[0:2])  # 左闭右开
          a         b         c         d
0 -0.008962 -1.440611 -0.241749 -0.328990
1  0.722666 -0.968137  0.752607  0.060432

4. 添加行

append() 函数可以将新的DataFrame 对象追加到原对象后面


>>> df_obj1 = pd.DataFrame([[1, 2, 3, 4]], columns=['a', 'b', 'c', 'd'])
>>> print(df_obj1)
   a  b  c  d
0  1  2  3  4
>>> df_obj = df_obj.append(df_obj1)
>>> print(df_obj)
          a         b         c         d
0 -0.214975 -1.574176  0.005630  0.372708
1  0.951436  0.725618  1.275498  2.072770
2 -1.739804 -0.375916 -0.588529 -0.045825
3  1.048349 -0.015041  0.953475  1.369060
4  1.515951 -1.453001  0.921479 -0.338588
0  1.000000  2.000000  3.000000  4.000000

5. 删除行

使用drop(索引)即可删除指定行

>>> df_obj = df_obj.drop(0)
>>> df_obj = df_obj.drop(1)
>>> print(df_obj)
          a         b         c         d
2 -1.739804 -0.375916 -0.588529 -0.045825
3  1.048349 -0.015041  0.953475  1.369060
4  1.515951 -1.453001  0.921479 -0.338588

五、书籍推荐

书籍展示:《从零开始利用Excel与Python进行数据分析》


【书籍内容简介】

  • 本书介绍了数据分析的方法和步骤,并分别通过Excel和Python实施和对比。通过本书一方面可以拓宽对Excel功能的认识,另一方面可以学习和掌握Python的基础操作。
    本书分为 11 章,涵盖的主要内容有Excel和Python在数据分析领域的定位与核心功能对比、统计量介绍、Excel与Python实践环境搭建、数据处理与分析的基本方法、ETL方法、数据建模理论、数据挖掘基础、数据可视化的基本方法、分析报告的制作方法。

以上是关于100天精通Python(数据分析篇)——第55天:Pandas之DataFrame对象大总结的主要内容,如果未能解决你的问题,请参考以下文章

100天精通Python(数据分析篇)——第52天:numpy完结

100天精通Python(数据分析篇)——第53天:初始pandas模块

100天精通Python(数据分析篇)——第49天:初识numpy模块

100天精通Python(数据分析篇)——第54天:Series对象大总结

100天精通Python(数据分析篇)——第50天:numpy进阶

100天精通Python(数据分析篇)——第64天:Pandas分组groupby函数案例