数据处理

  • 一、数据清洗
    • 数据清洗的三个步骤
    • 1.1处理缺失值
      • 1.1.1查找数据中的缺失值
      • 1.1.2删除缺失值 dropna() (德普纳)
      • 1.1.3
    • 1.2处理重复值
      • 第一步:1.2.1查找重复值:df.duplicated()
      • 1.2.2删除重复值 df.drop_duplicates()
    • 1.3处理异常值
      • 1.3.1 检查异常值 describe()
      • 1.3.2 抽取数据范围
  • 二、数据整理
    • 2.1.1转换日期数据
    • 2.1.2 提取月份信息
    • 2.1.3添加新列
  • 三、数据调整
    • 3.1、数据的列名设置:columns
      • 3.1.1、创建DataFrame对象并设置列名
      • 3.1.2、修改列名:columns
    • 3.2、数据的排序:sort_values()
    • 3.3、重置索引:s/df.reset_index(drop=True) 重置行索引
    • 3.4、数值的四舍五入:round()
  • 四、agg() 方法
    • 4.1、使用agg() 方法对整列进行切片操作
    • 4.2、使用agg() 方法同时对多列进行统计计算
  • 五、数据写入

数据处理指的是根据数据分析的目的,将收集到的数据进行加工、整理,形成适合数据分析的样式。主要分三个步骤来处理我们的数据,它们分别是:数据清洗、数据整理以及数据写入。

一、数据清洗

以下表数据为例:

这份数据索引为 1、3、4 的行完全重复。有一些数据的值为 NaN ,在 pandas 库中,NaN 代表缺失值,意思是这里的数据是空的。
在订单量、单价和销售额列中,我们能明显看到 0 和 999999999.0 的数值。首先,订单量如果为 0,那么这样的订单根本就不应该出现,这些数据也完整存在异常。
综上所述,这份数据同时存在缺失值、重复值以及异常值的问题,在进行数据处理时我们需要先将这些数据问题处理掉,这一过程也叫做数据清洗。

数据清洗的三个步骤

1.1处理缺失值

df.info() 能提炼出基本的数据信息,从而能让我们对于整体的数据有一个大概的印象
info—[ˈɪnfəʊ]—信息

# 查看 mask_data 的基本信息总结
mask_data.info()

运行结果:

其中主要包括:整体数据的总行数、各列数据类型统计、各列的列名、各列总共有多少非空数据、表格占用的系统空间等。
当非空数据与数据总量101942不一致时,说明这份数据有可能存在缺失值,处理这些缺失值的第一步,就是找到它们。

1.1.1查找数据中的缺失值

在 pandas 库中,我们可以使用 isna() 方法来查找 DataFrame 对象以及 Series 对象中的缺失值。它可以将查找结果以 DataFrame 对象或者 Series 对象的形式进行返回。

                      isna---伊斯纳

df.isna()返回的是 DataFrame 对象,Series.isna() 返回的就是 Series 对象。
返回对象中的内容都是布尔值,缺失数据会用 True 来表示,False 则代表这里的数据不缺失。
示例:

# 查看 mask_data 的缺失值
mask_data.isna()


从结果中我们可以直接看到数据前后 5 行的缺失情况,其中 True 的位置表示该位置的数据为缺失值。在 pandas 库中,除了直接输入 DataFrame 对象的名称能查看数据的前后 5 行之外,还可以使用df.head()或df.tail()方法查看数据。
对 DataFrame 对象使用 df.head() 方法默认可以查看数据的前 5 行,df.tail() 方法则默认可以查看数据的后 5 行
除了默认查看五行还可以在df.head()及df.tail()括号中填写数字,指定要看的行数
如:df.head(10) 查看前10行
head–[hed]–头 ,,, tail-- [teɪl] --n.尾;尾巴
示例:

# 查看数据后 5 行
mask_data.tail()

pandas 库中,NaN 代表的就是缺失数据。
对于缺失值,最简单的方法就是将含有缺失值的行直接删除,也可以给缺失值填充数据

1.1.2删除缺失值 dropna() (德普纳)

在 pandas 库中,可以使用 dropna() 方法直接删除 DataFrame 对象和 Series 对象中含有缺失值的数据
只要执行 df.dropna() 这一代码方法,就可以将 DataFrame 对象中包含缺失值的每一行全部删掉。
例:

# 删除所有缺失值
mask_data.dropna()

这时,当我们运行 mask_data.dropna() 代码返回的是一个删掉所有缺失数据的 DataFrame 对象,但这并不意味着它修改了 mask_data 数据,原mask_data 数据并没有改变,我们需要将 mask_data.dropna() 的运行结果重新赋值给 mask_data 变量,这样就可以将运行结果保存下来。
例:

# 删除所有缺失值
mask_data = mask_data.dropna()
# 查看数据基本信息总结
mask_data.info()

1.1.3

如果我们需要针对某几列的缺失数据进行删除,就需要用到df.dropna()的 subset 参数。

                     subset--- [ˈsʌbset] ---子集,分组;小组;

把要指定的列名写进中括号[]中,然后赋值给 subset 参数,就可以限定 dropna() 方法的删除范围。
比如我们想删掉除 test_data 中’品牌’、‘上牌时间’、 '里程数(km)'和 '保值率’四列数据缺失的行,可以如下书写代码:
test_data.dropna(subset=[‘品牌’, ‘上牌时间’, ‘里程数(km)’, ‘保值率’])
subset参数应是列表的形式。
总结图:

1.2处理重复值

第一步:1.2.1查找重复值:df.duplicated()

                    duplicated--- [ˈdjuːplɪkeɪtɪd‘] --复制,重复

我们可以直接使用 df.duplicated()方法来查找 DataFrame 对象中的重复数据。
使用 df.duplicated() 方法会返回一个 Series 对象,找出所有重复值。重复为 True,不重复为 False。
例:
in [21 ]

# 查找 mask_data 中的重复行
mask_data.duplicated()

Out[21 ]

0         False
1         False
2         False
3          True
4          True...
100951    False
100952    False
100953    False
100954    False
100955    False
Length: 100956, dtype: bool

返回结果很长…我们完全没有办法用肉眼进行观察。
我们可以将 mask_data.duplicated() 返回的结果放入中括号 [ ] 中,用来索引 mask_data 数据,查看 mask_data 数据中重复的行。

例:
In [ 22 ]

1 # 查看 mask_data 中的重复数据
2 mask_data[mask_data.duplicated()]
Out [ 22 ]订单编号      日期           省     订单量  单价 销售额
3   535a-4eca-8fa0-9cc54c66e11d 2020-01-01  河南  0.0 30.0    0.0
4   535a-4eca-8fa0-9cc54c66e11d 2020-01-01  河南  0.0 30.0    0.0
412 2b31-4392-be6e-19af71e40261 2020-01-09  河南  1.0 30.0    30.0
441 d707-4d5c-ac10-59d3fd3dc0bb 2020-01-10  广东  1.0 30.0    30.0
845 49f6-4bd5-97a5-aeb075a1c8c3 2020-01-16  湖北  8.0 40.0    320.0
... ... ... ... ... ... ...
100157  1ee1-41a6-8c0a-7c24f988689f 2020-06-25  湖北  8.0 30.0    240.0
100312  c72a-401d-8f11-39becb49d442 2020-06-26  湖北  9.0 30.0    270.0
100321  73f3-4d40-af4e-426548a7c539 2020-06-26  广东  3.0 30.0    90.0
100330  1265-4d27-a5c6-d3d6f44cd594 2020-06-26  广东  3.0 30.0    90.0
100772  a56d-4415-ad6e-020cdb154c35 2020-06-29  其他  0.0 30.0    0.0
448 rows × 6 columns

可以看到,这份数据中含有大量完全重复的行,这种重复数据并不具备分析的意义,而且会影响数据分析的结果,因此我们需要直接删除。

1.2.2删除重复值 df.drop_duplicates()

我们可以使用 pandas 库的 df.drop_duplicates() 方法直接删除 DataFrame 对象中重复出现的整行数据。
例:

In [ 23 ]
1 # 直接删除所有重复值
2 mask_data = mask_data.drop_duplicates()
3 # 查看 mask_data 中的重复数据
4 mask_data[mask_data.duplicated()]Out [ 23 ]
订单编号    日期  省   订单量 单价  销售额

在运行结果中我们能看见 mask_data 的表头下面是空的,说明到这里已经没有重复数据了。
df.drop_duplicates() 方法并不会将所有重复的行都删除。

在 pandas 库中只有重复出现的数据才会被判定为重复数据。
df.drop_duplicates() 方法删除的也都是重复出现的行,因此所有重复数据的第一行都会保留。
总结:

1.3处理异常值

1.3.1 检查异常值 describe()

describe— [dɪˈskraɪb] —描述
在 pandas 库中 describe() 方法则可以查看 Series 对象或者 DataFrame 对象的描述性统计信息。

In [ 26 ]
​1# 查看 mask_data 的描述性统计信息
2 mask_data.describe()
Out [ 26 ]订单量          单价       销售额
count   1.005080e+05   1.005080e+05   1.005080e+05
mean    9.551786e+05   9.552499e+05   9.592048e+05
std 3.089086e+07   3.089085e+07   3.089073e+07
min 0.000000e+00   3.000000e+01   0.000000e+00
25% 9.000000e+00   5.000000e+01   5.500000e+02
50% 2.000000e+01   5.000000e+01   1.700000e+03
75% 4.700000e+01   1.500000e+02   4.000000e+03
max 1.000000e+09   1.000000e+09   1.000000e+09

describe() 方法返回出来的统计信息分别代表数值型数据的频数统计、平均值、标准差、最小值、第一四分位数、中位数、第三四分位数以及最大值。

在计算机系统里,e+n 代表的是 10 的 n 次方。如上图的 1.009560e+05 代表的就是 1.009560 乘以 10 的 5 次方,也就是 100956

1.3.2 抽取数据范围

在pandas库中,有一种筛选数据的方法叫做布尔索引
前我们介绍过使用 df[‘列索引’] 来提取某一列的信息。在 pandas 库中,我们还可以在 df[ ] 中通过表达式的形式来提取一定范围的数据。
比如我们想选择 mask_data 数据中,单价一列小于等于 200 的数据,就可以设置条件表达式 mask_data[‘单价’] <= 200
把它加入括号中索引:mask_data[mask_data[‘单价’] <= 200],就可以选取 mask_data 数据中单价这一列小于等于 200 的数据。
例:

In [ 27 ]
1 # 筛选查看单价小于等于 200 的数据
2 mask_data[mask_data['单价'] <= 200]Out [ 27 ]订单编号       日期           省       订单量    单价    销售额
0   87af-48e5-8bed-c5dcf9ecc172 2020-01-01  广东  0.0  30.0   0.0
1   535a-4eca-8fa0-9cc54c66e11d 2020-01-01  河南  0.0  30.0   0.0
2   a56d-4415-ad6e-020cdb154c35 2020-01-01  湖北  1.0  30.0   30.0
5   953f-4b46-a8a2-0eb0e39818a8 2020-01-01  其他  0.0  30.0   0.0
6   953f-4b46-a8a2-0eb0e39818a8 2020-01-01  湖北  1.0  30.0   30.0
... ... ... ... ... ... ...
100951  8cad-41ee-85b7-c59b85f0ebe6 2020-06-30  湖北  10.0    30.0    300.0
100952  4ea4-480a-a070-295408955363 2020-06-30  湖北  6.0     30.0    180.0
100953  70f3-4461-9b5f-7f53a55c51b6 2020-06-30  湖北  10.0    30.0    300.0
100954  9cc8-4542-8fed-3145e1942504 2020-06-30  湖北  10.0    30.0    300.0
100955  f202-45df-96e2-ca4e4c389624 2020-06-30  湖北  5.0 30.0    150.0
100412 rows × 6 columns

如上单价小于等于 200 的数据就不显示了出来,这一操作就叫做布尔索引。

In [ 23 ]
1 # 查看单价小于等于 200 的数据
2 mask_data['单价'] <= 200
..................................
Out [ 23 ]
0         True
1         True
2         True
5         True
6         True...
100951    True
100952    True
100953    True
100954    True
100955    True
Name: 单价, Length: 100508, dtype: bool

如上,布尔索引的怎样实现,相当于给单价中每一个数据都进行了一次比较运算,然后将运算结果以 Serie 对象的形式进行返回。

最后,将单价小于等于 200 的数据筛选出来,重新赋值给 mask_data 就能过滤掉所有单价大于 200 的异常值。
例:

In [ 24 ]
1 # 筛选单价小于等于 200 的数据
2 mask_data = mask_data[mask_data['单价'] <= 200]
3 # 查看 mask_data 的描述性统计信息
4 mask_data.describe()
终端略.....

小结异常值的相关知识:

以上,数据就已经清洗完毕了,还需要整理数据将数据变得规整,这样才有利于后续的数据分析。

二、数据整理

数据整理指的是我们在数据分析前对所需字段进行数据排序、数据转换、数据抽取、数据合并、数据计算等准备操作。字段指的是表格的列
如下图:

为了便于按月分析,我们需要把以上按日统计的数据调整为月,然后作为新的月份字段保存到数据中。Python 中有一种专门储存时间日期的数据类型 —— datetime,我们可以直接从中提取想要的时间单位。但上面mask_data 中的日期列数据并不是datetime类型

需要将日期这一列的数据类型转换成datetime类型,才能从中提取月份信息。
这次的数据整理分成了三个步骤,分别是:转换日期数据、提取月份信息以及添加新列。

2.1.1转换日期数据

在 pandas 库中我们可以使用 pd.to_datetime(arg, format) 来将 DataFrame 对象或者 Series 对象的数据类型转换成 datetime 类型。

                        format---[ˈfɔːmæt] --格式

其中的 arg 参数为我们要转换的数据,它可以是 DataFrame 对象或 Series 对象,也可以是具体的某一个日期数据。
这次要转换的数据为 mask_data 中的’日期’字段,所以对应的 arg 参数就是 mask_data[‘日期’]。
format 参数为 datetime 类型的日期格式,如这份数据,它是以年-月-日的形式出现的,那么它对应的 format 就是 ‘%Y-%m-%d’(year-month-day的缩写)。
例:将’日期’字段的数据类型转换成 datetime,格式为’%Y-%m-%d’储存到 date_data 变量。(这里日期参数 Y 必须为大写,否则会报错)
‘%Y-%m-%d %H:%M:%S’ :为转换为年-月-日 小时:分:秒 的形式。

In [ 28 ]
1 # 转换日期数据,并设置对应的日期格式
2 date_data = pd.to_datetime(mask_data['日期'], format = '%Y-%m-%d')
3 # 查看 date_data
4 date_dataOut [ 28 ]
2        2020-01-01
6        2020-01-01
11       2020-01-01
12       2020-01-01
13       2020-01-01...
100951   2020-06-30
100952   2020-06-30
100953   2020-06-30
100954   2020-06-30
100955   2020-06-30
Name: 日期, Length: 99485, dtype: datetime64[ns]

将’日期’字段转换成 datetime 类型后,我们就可以直接从中提取月份信息。

2.1.2 提取月份信息

这里需要用到 Series.dt.month。其中的 Series 指的就是刚才日期数据转换完后的 Series 对象,我将它赋值到了变量 date_data。

date--- [deɪt] ---日期 、data--- [ˈdeɪtə] ---数据 、day--- [deɪ] ---白天

Series.dt 可以把 datetime 类型的数据转成一种方便我们提取日期或时间的对象。这种对象包含多种属性,其中有 year(年)、month(月)、day(日)等。
想要获取这份数据的年、月、日的信息,可以通过 Series.dt.year、Series.dt.month 以及 Series.dt.day 来获取。
提取日期,如:s.dt.date 这里s 为一个Series对象,提取出整列的日期,
样式为:2022-05-31 取出的数据仍然为一个Series对象
提取时间,如:s.dt.time 样式为:14:59:00,数据属性同上。

例:提取月份信息

In [ 29 ]
1 # 转换日期数据,并设置对应的日期格式
2 date_data = pd.to_datetime(mask_data['日期'], format = '%Y-%m-%d')
3 # 提取日期数据中的月份信息
4 month_data = date_data.dt.month
5 # 查看 month_data
6 month_data
运行
Out [ 29 ]
2         1
6         1
11        1
12        1
13        1..
100951    6
100952    6
100953    6
100954    6
100955    6
Name: 日期, Length: 99485, dtype: int64

最后,将月份数据添加到原数据,方便之后使用。

2.1.3添加新列

在 pandas 库中,我们可以直接用 df[‘colname’] = Series 的方式来为原数据添加新的一列。
colname 指的是要添加的新列的列名。在这个案例中,colname 就是月份,即,直接对新增的这列数据进行赋值,就能为 DataFrame 对象添加新列。
例:

In [ 30 ]
1 # 将月份数据添加到原数据中
2 mask_data['月份'] = month_data
3 # 查看原数据
4 mask_data
运行
Out [ 30 ]
订单编号                         日期     省    订单量 单价    销售额 月份
2 a56d-4415-ad6e-020cdb154c35 2020-01-01湖北    1.0   30.0    30.0    1
6 953f-4b46-a8a2-0eb0e39818a8   2020-01-01湖北    1.0 30.0    30.0    1
11  87af-48e5-8bed-c5dcf9ecc172 2020-01-01湖北    1.0 30.0    30.0    1
12  535a-4eca-8fa0-9cc54c66e11d 2020-01-01湖南    1.0 30.0    30.0    1
13  d707-4d5c-ac10-59d3fd3dc0bb 2020-01-01广东    1.0 30.0    30.0    1
... ... ... ... ... ... ... ...
100951  8cad-41ee-85b7-c59b85f0ebe6 2020-06-30湖北    10.0    30.0    300.0   6
100952  4ea4-480a-a070-295408955363 2020-06-30  湖北 6.0  30.0    180.0   6
100953  70f3-4461-9b5f-7f53a55c51b6 2020-06-30湖北    10.0    30.0    300.0   6
100954  9cc8-4542-8fed-3145e1942504 2020-06-30湖北    10.0    30.0    300.0   6
100955  f202-45df-96e2-ca4e4c389624 2020-06-30湖北    5.0 30.0        150.0   6
99485 rows × 7 columns

小结:

三、数据调整

3.1、数据的列名设置:columns

3.1.1、创建DataFrame对象并设置列名

创建DataFrame对象:pd.DataFrame(data,columns)
data作为DF对象的数据可以是列表,也可以是字典。
以嵌套列表作为data数据传入时,列表的元素会作为 DataFrame 对象的行数据显示,且会为数据默认生成从 0 开始的列名。
因此,可以借助 参数 columns 来设置列名或列索引,columns可以为列表,该列表的长度需与传入 DataFrame() 的列表的元素长度一致。

                   columns -- [ˈkɒləmz] --柱

例:

In [ 4 ]
1 # 设置列表
2 students_info = [['小蓝', '语文', '79'],
3['小邱', '数学', '83'],
4['小李', '英语', '92']]
5
​
6 # 使用列表创建 DataFrame 对象,同时设置列名
7 students_df = pd.DataFrame (students_info,columns=['姓名','科目','分数'])
8 students_df

3.1.2、修改列名:columns

对于已创建好的 DataFrame 对象,是可以修改列名的,即,将需要修改的列名组合成一个列表,再把列表赋给 DataFrame 对象的 columns 属性,对列名进行了修改:df.columns = [‘A’, ‘B’, ‘C’, ]
如:students_df.columns=[‘名字’,‘科目’,‘分数’]

3.2、数据的排序:sort_values()

df.sort_values(by) 方法可以对指定列进行排序操作,如对某列数据进行升序排列。参数by的值可以是列名

例:students_df.sort_values(by=‘分数’)

注意:本方法会按分数的升序对所有行进行重新排序。
如果不想对上面的数据集进行排序,只想提取出【分数】列,单独进行排序,代码可以这么写:
students_df[‘分数’].sort_values() #返回的是Series 对象
另外,不单是 DataFrame 对象可以调用 sort_values() 方法,Series 对象也能调用该方法。但Series 对象调用该函数时,函数没有参数 by。因为 Series 对象不具备列索引(列名)

3.3、重置索引:s/df.reset_index(drop=True) 重置行索引

数据集经排序后的行索引可能不再是连续的,而是比较混乱,如下:

这里需要用到reset_index() 方法,例:
reset_goods = s/df.reset_index(drop=True)
重置后的行索引值从 0 开始。

默认情况下,drop 的值为 False,即保留原索引,如果使用默认值 False,它的运行结果将会如下图所示。

一般情况下,使用 reset_index() 重置索引时,且原索引没有参考价值,建议参数 drop 赋值为 True ,去除原索引。

示例代码:

In [ 15 ]
1 # 创建一个 DataFrame 对象的数据
2 humans_df = pd.DataFrame({'姓名': ['小猿', '小马', '小鱼', '小猫', '小 龙'], '身高': ['165', '170', '160', '172', '178'],'体重': [56, 45, 60, 40, 70]})
3 humans_df

查看:

对身高进行升序排序后,重置行索引,不保留原索引:

In [ 16 ]
1 # 依照【身高】列的数据进行升序排序
2 reset_humans = humans_df.sort_values(by='身高')
3 # 重置索引,且不保留原索引
4 reset_humans = reset_humans.reset_index(drop=True)
5 reset_humans

3.4、数值的四舍五入:round()

代码示例:

In [ 20 ]
1 # 创建一个 DataFrame 对象的数据
2 humans_df = pd.DataFrame({'姓名': ['小猿', '小马', '小鱼', '小猫', '小龙'], '身高': ['165', '170', '160', '172', '178'], '体重': [56.25, 45.63, 60.72, 40.34, 70.5]})
3 humans_df


将【体重】列的数据保留到一位小数:

In [ 21 ]
1 # 保留【体重】列的数据到一位小数
2 humans_df['体重'] = round(humans_df['体重'],1)
3humans_df

humans_df[‘体重’] = round(humans_df[‘体重’],1)
或者:round(humans_df[‘体重’],1)

如果写作:humans_df = round(humans_df[‘体重’],1)
返回的是一个Series对象,如下:

0 56.2
1 45.6
2 60.7
3 40.3
4 70.5
Name: 体重, dtype: float64

四、agg() 方法

4.1、使用agg() 方法对整列进行切片操作

以DF对象reset_goods为例:

如果要对列’库存’求和,但是每件商品的库存量后都附有单位,无法直接进行求和操作。
由于每个数据的单位都为一个字符,可以选择使用切片的方式切除
这里就可以使用 agg() 方法对整列的数据进行统一操作。

示例代码:
先定义一个函数 new_func(),功能是把传入的数据进行切片,切除数据的最后一个字符。

In [ 117 ]
1 # 定义函数 new_func()
2 def new_func(data):
3    number = data[:-1]
4    return int(number)

接着,使用 agg() 方法将【库存】列的每个数据都传入 new_func() 函数进行计算,并取得函数的返回值。

In [ 118 ]
1 # 使用 agg() 方法对【库存】列的数据进行切片处理
2 reset_goods['库存'] = reset_goods['库存'].agg(new_func)
3 reset_goods


agg() 的使用语法:

agg() 中的参数 func 可以为自定义的函数名,如上方定义的 new_func() 函数,在传入自定义的函数时,只需要写上函数名,不需要加上括号以及函数的参数。

代码中使用 reset_goods[‘库存’] 指定【库存】列,再通过 agg() 方法将【库存】列的数据依次传给函数 new_func() 的参数 data。
函数 new_func() 会切除传入数据的最后一个字符,再将切除后的字符串转换为整数型,然后返回该数据。
通过 new_func() 函数返回的每个数据,最终会形成一个 Series 对象。将该对象重新赋给 reset_goods[‘库存’],【库存】列即为不带单位的数据。

计算各食品的总库存量:
reset_goods.groupby(‘名称’)[‘库存’].sum()

4.2、使用agg() 方法同时对多列进行统计计算

如果想在统计食品总库存量的同时,也能看到各食品在所有地区的平均单价, 这时使用agg() 方法时,该方法内的参数 func 需要传入字典。


示例:

In [ 120 ]
1 # 定义字典 dict_2
2 dict_2 = {3'单价': 'mean',
4'库存': 'sum'
5 }
6 # 同时计算各食品的平均单价和总库存量
7 reset_goods.groupby('名称').agg(dict_2)


说明:
1)使用 reset_goods.groupby(‘名称’) 让数据按【名称】列进行分组
2)定义一个字典 dict_2,字典的键为我们需要操作的列名,如 ‘单价’、‘库存’。字典的值为我们需要操作的函数名,这里我们需要求平均值函数 mean(),和求和函数 sum()
3)定义字典时只要函数名,不要函数名后的括号()以及函数的参数
4)分组后的数据调用 agg() 方法时,为方法的参数 func 传入字典 dict_2,可以同时得到各食品的平均单价和总库存量。

五、数据写入

这里,可以使用 df.to_csv() 方法,将清洗好的数据写入 csv 文件中。
我们需要在括号中填写文件路径:‘./工作/mask_data_clean.csv’,以及参数 encoding = ‘utf-8’ 设置编码格式。
例:

In [ 41 ]
1 # 保存清洗干净的数据
2 mask_data.to_csv('./工作/mask_data_clean.csv', encoding = 'utf-8')

代码执行完后虽然不会有内容显示,但会生成一个【mask_data_clean.csv】文件。
打开【mask_data.csv】文件,会看到最左侧多了一列数据,如下…

这个数据是 DataFrame 对象的行索引。pandas 库将 csv 文件读取为 DataFrame对象 时都会自动生成行索引。
我们可以使用 df.to_csv() 方法的 index 参数来限制 DataFrame 对象的行索引是否写入到 csv 文件。它的默认值为 True,会让你写入的 csv 文件包含一列行索引。如果我们把这个参数设置为 index = False 就可以取消写入行索引,不用将行索引那一列写入 csv 文件。
例:

In [ 35 ]
1 # 保存清洗干净的数据,并取消写入行索引
2 mask_data.to_csv('./工作/mask_data_clean.csv', index = False)

同样,代码执行完毕后是不会有任何内容显示,打开【mask_data.csv】文件,就会发现左侧的行索引消失了。

本章总节:本部分包含数据清洗、数据整理以及数据写入三个步骤,如下图

数据分析二、pandas库数据处理相关推荐

  1. Python数据分析之Pandas库

    Python数据分析之Pandas库 一.Pandas简介 二.Pandas库的安装 三.Pandas的数据结构 四.Series 和 DataFrame 数据结构的使用 五.其他可以参考的网站 一. ...

  2. python中不能使用索引运算的是_Python数据分析之Pandas库(笔记)

    Pandas数据结构 pandas有两个基本的数据结构:Series和DataFrame. 1.1 创建Series数据 需要引入pandas模块:import pandas as pd 需要引入Se ...

  3. Python数据分析~Pandas库30分钟快速入门

    目录 1  Pandas序列和数据表 2 Pandas数据聚合与分组运算 3 Pandas数据可视化 Pandas库在数据分析中是非常重要和常用的库,它利用数据框让数据的处理和操作变的简单和快捷.在数 ...

  4. python中的pandas库_数据分析中 pandas 库的基本用法详解

    上篇分享了数据分析用到的一个库:Numpy 库,今天分享一个比 Numpy 更高效的库:pandas,它可以对数据进行导入.清洗.处理.统计和输出.pandas 是基于 Numpy 库的,可以说,pa ...

  5. 数据分析——使用pandas进行数据处理

    使用pandas进行数据处理 概念介绍 pandas模块介绍 Series和DataFrame Series简介 DataFrame简介 DataFrame的常用属性方法 创建DataFrame Da ...

  6. 数据分析之Pandas缺失数据处理

    ↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习,不错过Datawhale干货 作者:耿远昊,Datawhale成员,华东师范大学Pandas 是一个强大的 ...

  7. Python数据分析之pandas库的使用详解

    本篇文章所依据是蚂蚁学Python作者讲解所写,且已征求作者的同意,内容基本都是视频中所讲的内容.视频满满的全是干货,也可一边看视频一边配合着本篇文章. 作者的公众号:蚂蚁学Python 作者也提供了 ...

  8. python学习之数据分析(二):Matplotlib库:常用画图技巧, 折线图, 散点图,柱状图,直方图, 饼图

    一.Matplotlib之HelloWorld 1. 什么是Matplotlib: 专门用于开发2D图表(包括3D图表) 使用起来及其简单 以渐进.交互式方式实现数据可视化 2. matplotlib ...

  9. 大数据分析-时间序列(pandas库 )

    pd.DatetimeIndex()与TimeSeries时间序列 pd.DatetimeIndex():生成时间index pd.Series/pd.DataFrame 可以将index 设置成时间 ...

最新文章

  1. python解析任意json
  2. Django报错SocialApp matching query does not exist以及Django的SITE_ID = 1的含义
  3. 关于分区索引与全局索引性能比较的示例
  4. VBS脚本压缩IIS日志
  5. java eclipse profile_在 Eclipse 中集成JProfiler 进行 JAVA 项目性能分析
  6. 说透Applet的数字签名之2——数字签名
  7. amd自定义分辨率_Intel首款独显性能走光:AMD/NVIDIA芒刺在背
  8. Kali下TheFatRat工具的安装教程
  9. matlab中grid的用法
  10. disallow root login remotely 不起作用?
  11. 【玩转微信公众平台之二】 账号注册
  12. Fasm汇编程序1.73,中文文档,第一章
  13. 生产环境系统突然访问速度变慢问题排查
  14. UVA 12325 宝箱 Zombie‘s Treasure Chest
  15. 什么是程序员的核心竞争力?
  16. 小明加密通道进入_门禁系统跟闸机通道的区分是什么?功能是一样吗
  17. DVWA-Reflected XSS
  18. json-lib使用详解——json小工具
  19. Linux 您未安装Flash Player 或者版本过低
  20. PHP 简单案例[1]

热门文章

  1. (PHP)将别人女朋友照片转成动漫头像(详细)
  2. 算法第一人左神(左程云):深入解析字节算法面试题与数据结构
  3. 2019总结,乘风破浪
  4. 有一种感情叫无缘,有一种放弃叫成全
  5. 永恒之蓝漏洞(windows7)
  6. VM,CentOS7,gcc,mpich安装,vim配置,mpi代码运行示例
  7. C#代表(delegate)
  8. 微信群聊助手好用吗?微信群聊助手可以发多少个人?
  9. android多媒体框架之流媒体----base on jellybean(八)
  10. 阿尔·里斯-市场营销的22条法则(22条商规)-8