python-数据分析基础

这篇博客详细介绍了Python进行数据分析的基础知识,包括python基础知识、pandas数据结构、数据获取、预处理、选择、数值操作、数据运算、时间序列、数据分组/数据透视表、多表拼接以及数据导出。重点讲解了pandas的series和DataFrame,数据预处理中的缺失值处理、异常值处理和数据类型转换,以及数据选择和数值操作。此外,还涵盖了数据可视化的基础知识和Python数据可视化的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块一:python的基础知识

一、基本概念

1、数

整数int、浮点数float

2、变量

模块二:pandas数据结构

一、series数据结构

1、含义:
series是一种类似于一维数组的对象,由一组数据与之相关的数据标签(即索引)组成

0 a
1 b
2 c
3 d
dtype:object

以上即为series数据结构,第一列数字是数据标签,第二列是具体的数据,数据标签与数据是一一对应的

2、创建一个series

方法:利用pd.Series(),通过给Series()方法传入不同的对象即可实现

传入一个列表:

import pandas as pd

S1 = pd.Series(['a','b','c','d'])

S1
Out[3]: 
0    a
1    b
2    c
3    d
dtype: object

指定索引:

# 直接传入一个列表会默认索引,可通过设置index参数来自定义索引
S2 = pd.Series([1,2,3,4],index = ['a','b','c','d'])

S2
Out[6]: 
a    1
b    2
c    3
d    4
dtype: int64

传入一个字典:

# 除series外,也可将数据与数据标签以key:value(字典)的形式传入,这样字典的key值就是数据标签,value就是数据值
S3 = pd.Series({
   'a':1,'b':2,'c':3,'d':4})

S3
Out[8]: 
a    1
b    2
c    3
d    4
dtype: int64

3、利用index方法获取Series的索引

S1.index
Out[9]: RangeIndex(start=0, stop=4, step=1)

S2.index
Out[10]: Index(['a', 'b', 'c', 'd'], dtype='object')

4、利用values方法获取series的值

# 与索引值对应的就是获取series的值,使用的方法是values方法
S1.values
Out[11]: array(['a', 'b', 'c', 'd'], dtype=object)

S2.values
Out[12]: array([1, 2, 3, 4], dtype=int64)

二、DataFrame表格型数据结构

1、含义:

series是由一组数据与一组索引(行索引)组成的数据结构,而dataframe是由一组数据与一对索引(行索引和列索引)组成的表格型数据结构。

# 例如
        技能
第一    excel
第二    sql
第三    python
第四    ppt

2、创建一个Dataframe
创建dataframe使用的方法是pd.DataFrame()

import pandas as pd

df1 = pd.DataFrame(['a','b','c','d'])

df1
Out[15]: 
   0
0  a
1  b
2  c
3  d

# 只传入一个单一列表时,该列表的值会显示成一列,且行和列都是从0开始的默认索引

3、传入一个嵌套列表

df2 = pd.DataFrame([['a','A'],['b','B'],['c','C'],['d','D']])

df2
Out[19]: 
   0  1
0  a  A
1  b  B
2  c  C
3  d  D

# 当传入一个嵌套列表时,会根据嵌套列表数显示成多列数据,行、列索引同样是从0开始的默认索引。列表里面嵌套的列表也可以换成元组
df2 = pd.DataFrame([('a','A'),('b','B'),('c','C'),('d','D')])

df2
Out[21]: 
   0  1
0  a  A
1  b  B
2  c  C
3  d  D

q1:# 传入的嵌套列表是元组还是列表是否有影响?

4、指定行、列索引

# 如果只给DataFrame()方法传入列表,则行、列索引都是默认值,可以通过设置columns参数自定义列索引,设置index参数自定义行索引

#设置列索引
df31 = pd.DataFrame([['a','A'],['b','B'],['c','C'],['d','D']],columns = ['大写','小写'])

df31
Out[24]: 
  大写 小写
0  a  A
1  b  B
2  c  C
3  d  D

#设置行索引
df32 = pd.DataFrame([['a','A'],['b','B'],['c','C'],['d','D']],index = ['大写','小写','没写','不写'])

df32
Out[26]: 
    0  1
大写  a  A
小写  b  B
没写  c  C
不写  d  D

#同时设置行列索引
df33 = pd.DataFrame([['a','A'],['b','B'],['c','C'],['d','D']],columns = ['大写','小写'],index = ['一','二','三','四'])

df33
Out[30]: 
  大写 小写
一  a  A
二  b  B
三  c  C
四  d  D

5、传入一个字典

data = {
   '小写':['a','b','c','d'],'大写':['A','B','C','D']}

df41 = pd.DataFrame(data)

df41
Out[35]: 
  小写 大写
0  a  A
1  b  B
2  c  C
3  d  D

# 直接以字典的形式传入DataFrame时,字典的key值就相当于列索引,这个时候如果没有设置行索引,则行索引默认,也可通过index参数自定义行索引

df42 = pd.DataFrame(data,index = ['一','二','三','四'])

df42
Out[37]: 
  小写 大写
一  a  A
二  b  B
三  c  C
四  d  D

6、获取DataFrame的行、列索引
利用columns方法获取DataFrame的列索引

df42.columns
Out[38]: Index(['小写', '大写'], dtype='object')

df33.columns
Out[39]: Index(['大写', '小写'], dtype='object')

利用index方法获取DataFrame的行索引

df42.index
Out[40]: Index(['一', '二', '三', '四'], dtype='object')

7、获取DataFrame的值

模块三:获取数据源

一、导入外部数据

导入数据主要用到read_x()方法,x表示待导入文件的格式

1、导入.xlsx文件

#使用的是read_excel()

#基本导入
需要指定文件路径
***可使用转义符r进行转义***
df = pd.read_excel(r"C:\Users\Lenovo\Desktop\工作簿1.xlsx")

df
Out[46]: 
  123412 324   
0   23df    srt
1    NaN     23
2    123     df
也可将\换成/
df = pd.read_excel("C:/Users/Lenovo/Desktop/工作簿1.xlsx")

df
Out[48]: 
  123412 324   
0   23df    srt
1    NaN     23
2    123     df

#指定导入哪个sheet
***可通过设定sheet_name参数来指定要导入哪个sheet的文件***
df11 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",sheet_name = 'Sheet1')

df11
Out[52]: 
                       用户ID  求和项:已结算金额
0   2210110((破壁灵芝孢子粉批发零售))       85.0
1            3287660(A 娜娜)       67.5
2               3399814(大爷)       56.0
3              1960736(凌海波)       50.0
4           2082573(天之龙王小姐)       48.0
..                      ...        ...
59       2130124(心若安好,便是晴天)        0.0
60              1997928(晴天)        0.0
61        1387016(S  STAR)        0.0
62              1075830(青鸟)        0.0
63                       总计     1513.0

[64 rows x 2 columns]

***除了可以指定具体Sheet的名字,还可以传入Sheet的顺序,从0开始计数***
df12 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",sheet_name = 1)

df12
Out[54]: 
           团队名称  团队ID    项目ID           项目名称  ...  质检打回数量    打回比例 质检数量    质检比例
0   龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...       0       *    0       *
1   龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...       3     0.6   12     2.4
2   龙猫标注官方团队二分部  3631  2728.0  【返修】多类别实例语义分割  ...       0       *    0       *
3   龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...       0       *    0       *
4   龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...       0       *    0       *
..          ...   ...     ...            ...  ...     ...     ...  ...     ...
71  龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...       0       *    0       *
72  龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...       0       *    0       *
73  龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...       0       *    0       *
74  龙猫标注官方团队二分部  3631  2736.0     【标注】场景语义分割  ...       0       *    0       *
75          NaN  数据汇总     NaN            NaN  ...      11  0.0155   54  0.0762

[76 rows x 20 columns]

df12 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",sheet_name = 0)

df12
Out[56]: 
                       用户ID  求和项:已结算金额
0   2210110((破壁灵芝孢子粉批发零售))       85.0
1            3287660(A 娜娜)       67.5
2               3399814(大爷)       56.0
3              1960736(凌海波)       50.0
4           2082573(天之龙王小姐)       48.0
..                      ...        ...
59       2130124(心若安好,便是晴天)        0.0
60              1997928(晴天)        0.0
61        1387016(S  STAR)        0.0
62              1075830(青鸟)        0.0
63                       总计     1513.0

[64 rows x 2 columns]
***如果不指定Sheet_name参数时,默认导入第一个Sheet的文件

#指定行索引
可以通过设置index_col参数来指定行索引,index_col表示用.xlsx文件中的第几列做行索引,从0开始数,也可以直接指定列名
df12 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",sheet_name = 1,index_col = '项目名称')

df12
Out[58]: 
                      团队名称  团队ID    项目ID    任务ID  ... 质检打回数量    打回比例 质检数量    质检比例
项目名称                                              ...                            
【标注】多类别实例语义分割  龙猫标注官方团队二分部  3631  2629.0  8734.0  ...      0       *    0       *
【标注】多类别实例语义分割  龙猫标注官方团队二分部  3631  2629.0  8735.0  ...      3     0.6   12     2.4
【返修】多类别实例语义分割  龙猫标注官方团队二分部  3631  2728.0  9001.0  ...      0       *    0       *
【标注】多类别实例语义分割  龙猫标注官方团队二分部  3631  2629.0  8733.0  ...      0       *    0       *
【标注】多类别实例语义分割  龙猫标注官方团队二分部  3631  2629.0  8733.0  ...      0       *    0       *
                   ...   ...     ...     ...  ...    ...     ...  ...     ...
【标注】多类别实例语义分割  龙猫标注官方团队二分部  3631  2629.0  8733.0  ...      0       *    0       *
【标注】多类别实例语义分割  龙猫标注官方团队二分部  3631  2629.0  8733.0  ...      0       *    0       *
【标注】多类别实例语义分割  龙猫标注官方团队二分部  3631  2629.0  8733.0  ...      0       *    0       *
【标注】场景语义分割     龙猫标注官方团队二分部  3631  2736.0  9022.0  ...      0       *    0       *
NaN                    NaN  数据汇总     NaN     NaN  ...     11  0.0155   54  0.0762

[76 rows x 19 columns]

#指定列索引
可以通过设置header参数来指定列索引,header参数表示用.xlsx文件中的第几行做列索引
使用第一行作为列索引
df12 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",sheet_name = 1,header = 0)

df12
Out[60]: 
           团队名称  团队ID    项目ID           项目名称  ...  质检打回数量    打回比例 质检数量    质检比例
0   龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...       0       *    0       *
1   龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...       3     0.6   12     2.4
2   龙猫标注官方团队二分部  3631  2728.0  【返修】多类别实例语义分割  ...       0       *    0       *
3   龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...       0       *    0       *
4   龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...       0       *    0       *
..          ...   ...     ...            ...  ...     ...     ...  ...     ...
71  龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...       0       *    0       *
72  龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...       0       *    0       *
73  龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...       0       *    0       *
74  龙猫标注官方团队二分部  3631  2736.0     【标注】场景语义分割  ...       0       *    0       *
75          NaN  数据汇总     NaN            NaN  ...      11  0.0155   54  0.0762

[76 rows x 20 columns]

使用第二行作为列索引
df12 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",sheet_name = 1,header = 1)

df12
Out[62]: 
    龙猫标注官方团队二分部  3631    2629  【标注】多类别实例语义分割  ...  0.1       * 0.2     *.1
0   龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...    3     0.6  12     2.4
1   龙猫标注官方团队二分部  3631  2728.0  【返修】多类别实例语义分割  ...    0       *   0       *
2   龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...    0       *   0       *
3   龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...    0       *   0       *
4   龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...    0       *   0       *
..          ...   ...     ...            ...  ...  ...     ...  ..     ...
70  龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...    0       *   0       *
71  龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...    0       *   0       *
72  龙猫标注官方团队二分部  3631  2629.0  【标注】多类别实例语义分割  ...    0       *   0       *
73  龙猫标注官方团队二分部  3631  2736.0     【标注】场景语义分割  ...    0       *   0       *
74          NaN  数据汇总     NaN            NaN  ...   11  0.0155  54  0.0762

[75 rows x 20 columns]

使用默认从0开始的数作为列索引
df12 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",sheet_name = 1,header = None)

df12
Out[64]: 
             0     1     2              3   ...      16      17    18      19
0          团队名称  团队ID  项目ID           项目名称  ...  质检打回数量    打回比例  质检数量    质检比例
1   龙猫标注官方团队二分部  3631  2629  【标注】多类别实例语义分割  ...       0       *     0       *
2   龙猫标注官方团队二分部  3631  2629  【标注】多类别实例语义分割  ...       3     0.6    12     2.4
3   龙猫标注官方团队二分部  3631  2728  【返修】多类别实例语义分割  ...       0       *     0       *
4   龙猫标注官方团队二分部  3631  2629  【标注】多类别实例语义分割  ...       0       *     0       *
..          ...   ...   ...            ...  ...     ...     ...   ...     ...
72  龙猫标注官方团队二分部  3631  2629  【标注】多类别实例语义分割  ...       0       *     0       *
73  龙猫标注官方团队二分部  3631  2629  【标注】多类别实例语义分割  ...       0       *     0       *
74  龙猫标注官方团队二分部  3631  2629  【标注】多类别实例语义分割  ...       0       *     0       *
75  龙猫标注官方团队二分部  3631  2736     【标注】场景语义分割  ...       0       *     0       *
76          NaN  数据汇总   NaN            NaN  ...      11  0.0155    54  0.0762

[77 rows x 20 columns]

#指定导入列
可以通过设置usecols参数来指定要导入的列,给定usecols参数具体的某个值,表示要导入第几列,同样是从0开始计数,也可以以列表的形式传入多个值,表示要传入哪些列

df12 = pd.read_excel(r"C:\Users\Lenovo\Desktop\data20200511185912.xlsx",usecols = [0,1])

df12
Out[85]: 
                       用户ID  求和项:已结算金额
0   2210110((破壁灵芝孢子粉批发零售))       85.0
1            3287660(A 娜娜)       67.5
2               3399814(大爷)       56.0
3              1960736(凌海波)       50.0
4           2082573(天之龙王小姐)       48.0
..                      ...        ...
59       2130124(心若安好,便是晴天)        0.0
60              1997928(晴天)        0.0
61        1387016(S  STAR)        0.0
62              1075830(青鸟)        0.0
63                       总计     1513.0

[64 rows x 2 columns]

2、导入.csv文件

使用的是read_csv()方法

#直接导入,只需要指明文件路径即可
df = pd.read_csv(r"C:\Users\Lenovo\Desktop\无标题.csv")

df
Out[105]: 
        id      uid  ... explain month_amount
0    49207  3158538  ...     NaN            0
1    49457  2418764  ...     NaN         3575
2    49459   859671  ...     NaN            0
3    49461  3172834  ...     NaN         7288
4    49462  2969695  ...     NaN            0
..     ...      ...  ...     ...          ...
269  77373  3402929  ...     NaN            0
270  77374  3502570  ...     NaN            0
271  77770  3235269  ...     NaN            0
272  77771  3506557  ...     NaN            0
273  77772  3288169  ...     NaN            0

[274 rows x 11 columns]

#指明指定分隔符号。read_csv()默认文件中的数据都是以逗号分开的,但是有的文件不是用逗号分开的,这个时候就需要人为指定分隔符号,否则就会报错
df = pd.read_csv(r"C:\Users\Lenovo\Desktop\工作簿2.csv",sep = ',')

df
Out[111]: 
      123  541     ``
0  sdfssd  548  sd5f4
1     NaN  sdf    NaN

df = pd.read_csv(r"C:\Users\Lenovo\Desktop\工作簿2.csv",sep = ' ')

df
Out[109]: 
         123,541,``
0  sdfssd,548,sd5f4
1             ,sdf,

#指明读取行数
可通过设置nrows参数即可
df = pd.read_csv(r"C:\Users\Lenovo\Desktop\工作簿2.csv",sep = ',',nrows = 1)

df
Out[115]: 
      123  541     ``
0  sdfssd  548  sd5f4

#指定编码格式
python用得比较多的两种编码格式是UTF-8和gbk,默认编码格式是UTF-8,可通过设置encoding = 'utf-8''gbk'来设置导入的编码格式

#engine指定
当文件路径或文件名中包含中文时,如果还用基础的导入方式就会报错,可通过设置engine参数来消除这个错误。

这个错误主要是因为当调用read_csv()方法时,默认使用C语言作为解析语言,所以需要把engine的默认值更改为python。

如果文件格式是CSV UTF-8(逗号分割)(*.csv),那么编码格式也需要跟着变为utf-8-sig,如果文件格式是CSV(逗号分隔)(*.csv)格式,对应的编码格式则为gbk

3、导入.txt文件

通过使用read_table()即可

read_table()是将利用分隔符分开的文件导入DataFrame的通用函数

不仅可以导入.txt文件,还可以导入.csv文件

***使用read_table()导入文件时,不论什么文件都需要指定好分隔符才可以***
#导入.txt文件
df = pd.read_table(r"C:\Users\Lenovo\Desktop\文本文件测试.txt",sep = '\t')

df
Out[119]: 
        id      uid  ... explain month_amount
0    49207
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值