Pandas之数据处理

1,200 阅读19分钟

1、数据处理

下表是Pandas官方手册上给出的一张表格,表格描述的是Pandas中对各种数据文件类型的读、写函数,你可以直接在官方手册中找到:


1.1、数据加载

首先,我们需要将收集的数据加载到内存中,才能进行进一步的操作。pandas提供了非常多的读取数据的函数,分别应用在各种数据源环境中,我们常用的函数为:

  • read_csv
  • read_table
  • read_sql
  • read_excel

说明:

  • read_csv与read_table默认使用的分隔符不同。

常用参数

无论是txt文件还是csv文件,在Pandas中都使用read_csv()方法读取,当然也使用同一个方法写入到文件,那就是to_csv()方法。

read_csv与read_table常用的参数:

  • sep / delimiter 列分隔符,普通文本文件,应该都是使用结构化的方式来组织,才能使用dataframe
  • header 文件中是否存储着生命列名的一行
  • names 如果header=None,那么names必须制定!否则就没有列的定义了。
  • index_col 读取文件读到的第几列作为 行索引
  • usecols 读取文件的时候可能有很多列,我们只想要其中的部分列

使用注意: import pandas as pd

pd.read_csv(file, sep, header, names, index_col, usecols)

导入对应的第三方模块,忽略警告等,做一些准备操作;

import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings("ignore")

print(np.__version__)
print(pd.__version__)
1.18.0
0.25.3

默认读取

CSV TSV

C:逗号分隔的结构化文件 T:制表符分隔的文件

关于CSV已经形成了一种惯性认识:只要是普通的文本文件,并且是结构化的 所以不管是什么分隔符,都是CSV格式

狭义上,必须是逗号 但是现在一般都把结构化的普通文本文件,都是用CSV的方式来对待,区别仅仅是改一下分隔符而已

# 读取csv文件,返回一个DataFrame类型的对象。
# 在读取的时候,默认会将第一行记录当成标题。如果没有标题,我们可以指定header=None。
# read_csv默认使用逗号作为分隔符,我们可以使用sep或delimiter来指定分隔符。
df = pd.read_csv(r"F:\Pandas\student.csv", header=None, sep="\t")
display(df.head(3))
                 0095002,刘晨,女,19,IS195017,王风娟,女,18,IS295018,王一,女,19,IS

指定列定义

# 默认会把第一行当做列名
df = pd.read_csv("student1.csv")
display(df.head(3))95002刘晨女19IS095017王风娟女18IS195018王一女19IS295013冯伟男21CS

# 如果header为None,read_csv默认会自己生成列标签。(0, 1, 2, 3……)。
# 我们可以通过names参数来指定列标签(标题)
df = pd.read_csv(r"student.csv", header=None, 
                 names=["学号", "姓名", "性别", "年龄", "部门"])
display(df.head())
学号姓名性别年龄        部门095002刘晨女19IS195017王风娟女18IS295018王一女19IS395013冯伟男21CS495014王小丽女19CS

指定行索引

# 对于行索引,默认会自动生成(0, 1, 2, 3 ……)如果我们需要自己指定某列充当行索引(例如,数据库,数据表中的主键)
# 我们可以使用index_col参数来进行设置。
df = pd.read_csv("student.csv", header=None, index_col=0, 
                 names=["学号", "姓名", "性别", "年龄", "部门"])
display(df.head())
姓名性别年龄       部门学号95002刘晨女19IS95017王风娟女18IS95018王一女19IS95013冯伟男21CS95014王小丽女19CS

指定合法数据列

# 我们可以使用usecols来控制需要哪些列。如果某列充当索引列(index_col),则充当索引列的标签,也需要指定在usecols中。
df = pd.read_csv("student.csv", header=None, index_col=2, 
                 usecols=[2, 3, 4],
                 names=["学号", "姓名", "性别"])
display(df.head())
学号姓名性别IS女19IS女18IS女19CS男21CS女19

从数据库中读取数据。与read_csv相同,也会返回DataFrame对象。

pandas除了能读取文件数据之外还能读取很多其他系统的数据

比如mysql,这儿为了做测试方便,使用一个轻量级的数据库来进行测试! 这个数据库叫做 sqllite 这是一个轻量级的数据库。不用安装! 立即使用!

关于RDBMS系统: 轻量级:sqllite 中量级:mysql 重量级:oracle

使用统一的方式:JDBC的方式

import sqlite3
# import pymysql  默认已经安装了sqlite3 所以直接就可以使用!
con = sqlite3.connect("test.db")
con.execute("drop table if exists person")
con.commit()

# 创建数据表
con.execute("create table person(id int primary key, name varchar(30), age int)")

# 向表中插入数据
con.execute("insert into person(id, name ,age) values(22, 'sk', 17)")
con.execute("insert into person(id, name ,age) values(33, 'zs', 18)")

# 从数据库中读取数据,sql指定查询的数据(用来构造DataFrame)。con数据库的链接。
t = pd.read_sql("select id, name, age from person", con)

display(t)
idname      age022sk17133zs18

写入文件

DataFrame与Series对象的to_csv方法,可以将数据写入文件或者指定的数据流中。

  • to_csv

常用参数

  • sep 分隔符,默认是逗号
  • header 是否写入标题行,默认为True。默认写入,就是列名
  • na_rep 空值的表示,缺失值怎么写?
  • index 是否写入行索引(简称为索引),默认为True。
  • index_label 索引字段的名称 index.name = index.label
  • columns 写入的字段,默认为全部写入。

指定一列nan,方便测试

df = pd.DataFrame(np.arange(15).reshape(3, 5))
df[5] = np.nan

df.columns = ["a1", "a2", "a3", "a4", "a5", "a6"]
df[["a5", "a6"]] = df[["a6", "a5"]]
display(df)
a1a2a3a4  a5       a600123NaN415678NaN9210111213NaN14

指定分隔符

# 默认以逗号作为分隔符,可以使用sep来自定义分隔符。
df.to_csv("data1.csv", sep="-")

指定是否写入header

# 默认情况会写入标题(行标签索引)。可以使用header进行设置是否写入标题。True,写入(默认),False不写入。
df.to_csv("data1.csv", header=False)

指定nan的写出规则

# 默认情况下,空值不显示,我们可以自定义空值的显式效果(内容)。
df.to_csv("data1.csv", header=False, na_rep="空")

指定是否写入行索引

# 行索引,默认写入,我们可以通过参数index来设置是否写入行索引。True,写入(默认), False,不写入。
df.to_csv("data1.csv", header=False, na_rep="空", index=False)

指定是否写入行索引的名称

# 可以通过index_label来设置行索引的名称。
df.to_csv("data5.csv", index_label="index_name", na_rep="空")

指定写出那些数据列

# 我们可以通过colomns列来设置那些列写入到文件中。默认为写入所有列。
df.to_csv("data1.csv", columns=["a2", "a4"], 
          header=False, na_rep="空", index=False)

写出数据到内存

# to_csv 不仅可以写入硬盘文件中,也可以写入内存(类文件对象)中。【处理速度更快,性能更好】
# 类文件对象:像文件那样具有read,write等功能的对象。

# StringIO 处理文本类型,如果是文本格式,都是字符串类型可解析
# BytesIO 处理二进制类型,如果是图片,视频,音频等,都是二进制格式。没法使用字符串来解析
from io import StringIO, BytesIO
# 创建一个类文件对象
str_io = StringIO()
df.to_csv(str_io)

# 查看文件指针的位置
display(str_io.tell())

# 调整文件指针的位置。将指针调整到文件的最前端。
str_io.seek(0)
display(str_io.read())

# 可以调用getvalue方法取出StringIO对象中的数据。(不用调整指针,再去读取)
display(str_io.getvalue())
print(str_io.getvalue())
67',a1,a2,a3,a4,a5,a6\r\n0,0,1,2,3,,4\r\n1,5,6,7,8,,9\r\n2,10,11,12,13,,14\r\n'',a1,a2,a3,a4,a5,a6\r\n0,0,1,2,3,,4\r\n1,5,6,7,8,,9\r\n2,10,11,12,13,,14\r\n',a1,a2,a3,a4,a5,a6
0,0,1,2,3,,4
1,5,6,7,8,,9
2,10,11,12,13,,14

2、数据清洗

我们需要对数据进行一些预处理操作,才能用到后续的数据分析与机器学习中。这是因为,无论数据的来源为何处,我们都不可能保证数据一定是准确无误的。
数据清洗可以包含以下几方面内容:

  • 处理缺失值
  • 处理异常值
  • 处理重复值

df = pd.read_csv("spider.csv", header=None)
display(df.head(5))
0123           402015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌216.01392.6812015-8-24http://www.apinpai.com/我;张国荣;80;励志273.01447.1722015-12-14http://www.movie.com/dor/《恶棍天使》;2015.12.24;2016.2.13;天津橙子映像传媒有限公司、北京光线影...NaNNaN32015-4-2http://bj.qu114.com/my way;张敬轩;90;励志52.0337.2742015-12-19http://www.movie.com/dor/《失孤》;2015.3.20;2015.5.3;华谊兄弟传媒集团、源合圣影视、映艺娱乐;彭三...NaNNaN

2.1、缺失值处理

发现缺失值

Pandas中,会将float类型的nan与None视为缺失值,我们可以通过如下方法来检测缺失值:

  • info
  • isnull
  • notnull

说明:

  • 判断是否存在空值,可以将isnull与any或all结合使用。

检测整体缺失值情况 df.info()

# 按照列来检测缺失值,首先可以调用info方法进行整体查看。
# info方法可以显示DataFrame中每列的相关信息。
df.info()   
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1396 entries, 0 to 1395
Data columns (total 5 columns):
0    1396 non-null object
1    1396 non-null object
2    1396 non-null object
3    1098 non-null float64
4    1098 non-null float64
dtypes: float64(2), object(3)
memory usage: 54.7+ KB

df.shape
(1396, 5)

判断空值的情况

# 检测 空 值
display(df.isnull().head())
display(df[2].isnull().any())  # 只要结果为True,就表示这一列有 NaN 值,,有缺失值
display(df[3].isnull().any())  # 如果any函数的结果为false,表示没有缺失值
0123          40FalseFalseFalseFalseFalse1FalseFalseFalseFalseFalse2FalseFalseFalseTrueTrue3FalseFalseFalseFalseFalse4FalseFalseFalseTrueTrueFalseTrue

# 检测 不为空 的值
display(df.notnull().head())
0123          40TrueTrueTrueTrueTrue1TrueTrueTrueTrueTrue2TrueTrueTrueFalseFalse3TrueTrueTrueTrueTrue4TrueTrueTrueFalseFalse

丢弃缺失值

对于缺失值,我们可以将其进行丢弃处理(dropna)。

说明:

  • how:指定dropna丢弃缺失值的行为,默认为any。all
  • axis:指定丢弃行或者丢弃列(默认为丢弃行)。
  • thresh:当非空数值达到该值时,保留数据,否则删除。 thresh = 10
  • inplace:指定是否就地修改,默认为False。 是否就地操作

按照指定规则丢弃缺失值 how=?

df = pd.read_csv("spider.csv", header=None)
display(df.head())
0123          402015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌216.01392.6812015-8-24http://www.apinpai.com/我;张国荣;80;励志273.01447.1722015-12-14http://www.movie.com/dor/《恶棍天使》;2015.12.24;2016.2.13;天津橙子映像传媒有限公司、北京光线影...NaNNaN32015-4-2http://bj.qu114.com/my way;张敬轩;90;励志52.0337.2742015-12-19http://www.movie.com/dor/《失孤》;2015.3.20;2015.5.3;华谊兄弟传媒集团、源合圣影视、映艺娱乐;彭三...NaNNaN

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1396 entries, 0 to 1395
Data columns (total 5 columns):
0    1396 non-null object
1    1396 non-null object
2    1396 non-null object
3    1098 non-null float64
4    1098 non-null float64
dtypes: float64(2), object(3)
memory usage: 54.7+ KB

总结上面的信息: 这个df中的有 1396-1098行中的第3 4 列为NaN

# 处理空值。丢弃空值,使用dropna。
df1 = df.dropna()
df1.info()

# 这个行为表示: 把df中的 有缺失字段值的任意一行都删掉
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1098 entries, 0 to 1395
Data columns (total 5 columns):
0    1098 non-null object
1    1098 non-null object
2    1098 non-null object
3    1098 non-null float64
4    1098 non-null float64
dtypes: float64(2), object(3)
memory usage: 51.5+ KB

df.size
# 总元素个数: 1098 * 5 = 6980
6980

df1.shape[0]
df1.shape[1]
5

# 默认情况下,how的值为any,表示只要存在空值,就丢弃行(列),我们可以指定为all,表示所有值为空值时,才进行删除。
df.dropna(how="all", axis=0).info()

# 表示按照行来进行删除,如果某一行中,所有的字段都为NaN就删掉
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1396 entries, 0 to 1395
Data columns (total 5 columns):
0    1396 non-null object
1    1396 non-null object
2    1396 non-null object
3    1098 non-null float64
4    1098 non-null float64
dtypes: float64(2), object(3)
memory usage: 65.4+ KB

丢弃 行或者 列 axis=?

df = pd.read_csv("spider.csv", header=None)
display(df.head())

# 处理空值。丢弃空值,使用dropna。
df.dropna().info()

# 默认情况下,how的值为any,表示只要存在空值,就丢弃行(列),我们可以指定为all,表示所有值为空值时,才进行删除。
df.dropna(how="all").info()

# 默认,存在空值,会丢弃行,我们可以指定丢弃列。(axis=0表示按行删除,axis=1表示按列删除。)
display(df.dropna(axis=1).head())
0123         402015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌216.01392.6812015-8-24http://www.apinpai.com/我;张国荣;80;励志273.01447.1722015-12-14http://www.movie.com/dor/《恶棍天使》;2015.12.24;2016.2.13;天津橙子映像传媒有限公司、北京光线影...NaNNaN32015-4-2http://bj.qu114.com/my way;张敬轩;90;励志52.0337.2742015-12-19http://www.movie.com/dor/《失孤》;2015.3.20;2015.5.3;华谊兄弟传媒集团、源合圣影视、映艺娱乐;彭三...NaNNaN<class 'pandas.core.frame.DataFrame'>
Int64Index: 1098 entries, 0 to 1395
Data columns (total 5 columns):
0    1098 non-null object
1    1098 non-null object
2    1098 non-null object
3    1098 non-null float64
4    1098 non-null float64
dtypes: float64(2), object(3)
memory usage: 51.5+ KB
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1396 entries, 0 to 1395
Data columns (total 5 columns):
0    1396 non-null object
1    1396 non-null object
2    1396 non-null object
3    1098 non-null float64
4    1098 non-null float64
dtypes: float64(2), object(3)
memory usage: 65.4+ KB01                       202015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌12015-8-24http://www.apinpai.com/我;张国荣;80;励志22015-12-14http://www.movie.com/dor/《恶棍天使》;2015.12.24;2016.2.13;天津橙子映像传媒有限公司、北京光线影...32015-4-2http://bj.qu114.com/my way;张敬轩;90;励志42015-12-19http://www.movie.com/dor/《失孤》;2015.3.20;2015.5.3;华谊兄弟传媒集团、源合圣影视、映艺娱乐;彭三...

按照指定规则丢弃 thresh=? inplace=? axis=?

df = pd.read_csv("spider.csv", header=None)
display(df.head())

# 有时候,how的any与all可能都不太合适。any的条件太宽松,all又太严格。我们可以自定义删除的门槛。
# 通过thresh来指定(门槛)。指的是非空的数据至少要达到thresh指定的数量时,整个行(列)才会保留,否则就删除。
# 可以使用inplace来设置是否进行就地修改。默认为False。
df1 = df.dropna(thresh=4, inplace=False, axis=0).head(10)
display(df1)

# 表示,如果某一行中,不为NaN的字段个数 >= 4 那么就不删除了。
0123           402015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌216.01392.6812015-8-24http://www.apinpai.com/我;张国荣;80;励志273.01447.1722015-12-14http://www.movie.com/dor/《恶棍天使》;2015.12.24;2016.2.13;天津橙子映像传媒有限公司、北京光线影...NaNNaN32015-4-2http://bj.qu114.com/my way;张敬轩;90;励志52.0337.2742015-12-19http://www.movie.com/dor/《失孤》;2015.3.20;2015.5.3;华谊兄弟传媒集团、源合圣影视、映艺娱乐;彭三...NaNNaN0123402015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌216.01392.6812015-8-24http://www.apinpai.com/我;张国荣;80;励志273.01447.1732015-4-2http://bj.qu114.com/my way;张敬轩;90;励志52.0337.2752015-5-28http://www.favolist.com/屋顶;温岚;80;励志217.0903.2962015-8-1http://www.apinpai.com/小兔子乖乖;小蓓蕾组合;90;儿歌184.0473.0772015-8-6http://www.99inf.com/光辉岁月;beyond;80;励志72.01051.7382015-6-28http://www.qudee.com/逃脱;李玟;90;伤感123.0483.2392015-8-7http://www.alifenfen.com/星;邓丽君;80;励志257.01779.36102015-7-15http://www.waaku.com/我心是海洋;蔡琴;80;励志210.01240.49112015-4-5http://www.yifawang.cn/同道中人;张国荣;80;励志42.0963.85

填充缺失值

我们也可以对缺失值进行填充(fillna)。

说明:

  • value:填充所使用的值。可以是一个字典,这样就可以为DataFrame的不同列指定不同的填充值。
  • method:指定前值(上一个有效值)填充(pad / ffill),还是后值(下一个有效值)填充(backfill / bfill)。
  • limit:如果指定method,表示最大连续NaN的填充数量,如果没有指定method,则表示最大的NaN填充数量。
  • inplace:指定是否就地修改,默认为False。

这些参数都很常用,联合起来控制进行替换的规则

df = pd.read_csv("spider.csv", header=None)
display(df.head())
0123          402015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌216.01392.6812015-8-24http://www.apinpai.com/我;张国荣;80;励志273.01447.1722015-12-14http://www.movie.com/dor/《恶棍天使》;2015.12.24;2016.2.13;天津橙子映像传媒有限公司、北京光线影...NaNNaN32015-4-2http://bj.qu114.com/my way;张敬轩;90;励志52.0337.2742015-12-19http://www.movie.com/dor/《失孤》;2015.3.20;2015.5.3;华谊兄弟传媒集团、源合圣影视、映艺娱乐;彭三...NaNNaN

根据指定默认值填充缺失值

# 填充值 fillna进行填充。
# 使用固定值来填充所有的列。
df1 = df.fillna(10000)
display(df1.head())
0123          402015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌216.01392.6812015-8-24http://www.apinpai.com/我;张国荣;80;励志273.01447.1722015-12-14http://www.movie.com/dor/《恶棍天使》;2015.12.24;2016.2.13;天津橙子映像传媒有限公司、北京光线影...10000.010000.0032015-4-2http://bj.qu114.com/my way;张敬轩;90;励志52.0337.2742015-12-19http://www.movie.com/dor/《失孤》;2015.3.20;2015.5.3;华谊兄弟传媒集团、源合圣影视、映艺娱乐;彭三...10000.010000.00

根据指定的字典来填充缺失值(key是列,value是填充的值)

# 可以提供一个字典,这样就能够为不同的列,填充不同的值。
# 字典的key指定索引,value指定填充值。
df2 = df.fillna({3: 5000, 4:1000})
display(df2.head())

# 不同的列,在一个df中的 基本上可以说肯定具有不同的意义,所以缺失值的样式也肯定不一样
0123          402015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌216.01392.6812015-8-24http://www.apinpai.com/我;张国荣;80;励志273.01447.1722015-12-14http://www.movie.com/dor/《恶棍天使》;2015.12.24;2016.2.13;天津橙子映像传媒有限公司、北京光线影...5000.01000.0032015-4-2http://bj.qu114.com/my way;张敬轩;90;励志52.0337.2742015-12-19http://www.movie.com/dor/《失孤》;2015.3.20;2015.5.3;华谊兄弟传媒集团、源合圣影视、映艺娱乐;彭三...5000.01000.00

向上填充,向下填充

df = pd.read_csv("spider.csv", header=None)
display(df.head())
0123         402015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌216.01392.6812015-8-24http://www.apinpai.com/我;张国荣;80;励志273.01447.1722015-12-14http://www.movie.com/dor/《恶棍天使》;2015.12.24;2016.2.13;天津橙子映像传媒有限公司、北京光线影...NaNNaN32015-4-2http://bj.qu114.com/my way;张敬轩;90;励志52.0337.2742015-12-19http://www.movie.com/dor/《失孤》;2015.3.20;2015.5.3;华谊兄弟传媒集团、源合圣影视、映艺娱乐;彭三...NaNNaN

# 我们可以使用method,来指定向前(后)填充。
# 此种情况下,主要应用是记录之间有着紧密的关联(趋势)。例如,房价,股票。

# 使用上一个有效值进行填充。
display(df.fillna(method="ffill").head(5))

# 第3行,第5行的值, 使用了 第2行, 第4行的同名列的值进行填充
0123          402015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌216.01392.6812015-8-24http://www.apinpai.com/我;张国荣;80;励志273.01447.1722015-12-14http://www.movie.com/dor/《恶棍天使》;2015.12.24;2016.2.13;天津橙子映像传媒有限公司、北京光线影...273.01447.1732015-4-2http://bj.qu114.com/my way;张敬轩;90;励志52.0337.2742015-12-19http://www.movie.com/dor/《失孤》;2015.3.20;2015.5.3;华谊兄弟传媒集团、源合圣影视、映艺娱乐;彭三...52.0337.27

# 使用下一个有效值进行填充。
display(df.fillna(method="bfill").head(6))

# 第3行,第5行的值, 使用了 第4行, 第6行的同名列的值进行填充
0123           402015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌216.01392.6812015-8-24http://www.apinpai.com/我;张国荣;80;励志273.01447.1722015-12-14http://www.movie.com/dor/《恶棍天使》;2015.12.24;2016.2.13;天津橙子映像传媒有限公司、北京光线影...52.0337.2732015-4-2http://bj.qu114.com/my way;张敬轩;90;励志52.0337.2742015-12-19http://www.movie.com/dor/《失孤》;2015.3.20;2015.5.3;华谊兄弟传媒集团、源合圣影视、映艺娱乐;彭三...217.0903.2952015-5-28http://www.favolist.com/屋顶;温岚;80;励志217.0903.29

df = pd.read_csv("spider.csv", header=None)
display(df.head(30))
0123           402015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌216.01392.6812015-8-24http://www.apinpai.com/我;张国荣;80;励志273.01447.1722015-12-14http://www.movie.com/dor/《恶棍天使》;2015.12.24;2016.2.13;天津橙子映像传媒有限公司、北京光线影...NaNNaN32015-4-2http://bj.qu114.com/my way;张敬轩;90;励志52.0337.2742015-12-19http://www.movie.com/dor/《失孤》;2015.3.20;2015.5.3;华谊兄弟传媒集团、源合圣影视、映艺娱乐;彭三...NaNNaN52015-5-28http://www.favolist.com/屋顶;温岚;80;励志217.0903.2962015-8-1http://www.apinpai.com/小兔子乖乖;小蓓蕾组合;90;儿歌184.0473.0772015-8-6http://www.99inf.com/光辉岁月;beyond;80;励志72.01051.7382015-6-28http://www.qudee.com/逃脱;李玟;90;伤感123.0483.2392015-8-7http://www.alifenfen.com/星;邓丽君;80;励志257.01779.36102015-7-15http://www.waaku.com/我心是海洋;蔡琴;80;励志210.01240.49112015-4-5http://www.yifawang.cn/同道中人;张国荣;80;励志42.0963.85122015-12-22http://www.movie.com/bor/12386/《将错就错》;2015.3.5;2015.3.29;中国电影股份有限公司等;王宁;小沈阳,田...NaNNaN132015-6-29http://www.apinpai.com/借过;容祖儿;90;伤感16.01869.68142015-4-26http://info.tianya.cn最冷一天;陈奕迅;90;伤感259.0554.35152015-4-6http://www.apinpai.com/加油;林俊杰/mc hotdog;90;励志252.0644.22162015-7-27http://www.apinpai.com/firework;katy perry;90;励志71.0697.20172015-6-8http://beijing.faxinxi.cn/给所有知道我名字的人;赵传;80;励志174.01258.13182015-7-13http://www.denghuo.com/逃脱;李玟;90;伤感253.0333.04192015-12-15http://www.movie.com/dor/《少年班》;2015.6.19;2015.7.19;工夫影业;华谊兄弟;肖洋;孙红雷,周冬雨...NaNNaN202015-12-1http://www.movie.com/dor/《既然青春留不住》;2015.10.23;2015.11.22;杭州和润影视有限公司;田蒙;...NaNNaN212015-8-5http://www.waaku.com/永远不要说放弃;童安格;80;励志261.01353.83222015-5-31http://www.alifenfen.com/忘记拥抱;a-lin;80;伤感260.0112.41232015-12-26http://www.movie.com/dor/《少年班》;2015.6.19;2015.7.19;工夫影业;华谊兄弟;肖洋;孙红雷,周冬雨...NaNNaN242015-8-30http://www.qudee.com/屋顶;温岚;80;励志196.01847.63252015-4-20http://www.favolist.com/story of my life;bon jovi;90;励志214.01860.87262015-6-21http://www.denghuo.com/借我;谢春花;90;伤感272.0937.38272015-4-28http://www.wuhan58.com/index.phpfirework;katy perry;90;励志289.0501.72282015-3-19http://beijing.hand2hand.cn/太阳星辰;张学友;80;励志19.01802.64292015-5-1http://www.010y.com/一起走过的日子;刘德华;80;伤感174.0621.15

# limit参数。如果指定method,则表示最多连续填充。
# 如果没有指定method,则表示总共填充。
display(df.fillna(method="bfill", limit=1).head(10))
0123          402015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌216.01392.6812015-8-24http://www.apinpai.com/我;张国荣;80;励志273.01447.1722015-12-14http://www.movie.com/dor/《恶棍天使》;2015.12.24;2016.2.13;天津橙子映像传媒有限公司、北京光线影...52.0337.2732015-4-2http://bj.qu114.com/my way;张敬轩;90;励志52.0337.2742015-12-19http://www.movie.com/dor/《失孤》;2015.3.20;2015.5.3;华谊兄弟传媒集团、源合圣影视、映艺娱乐;彭三...217.0903.2952015-5-28http://www.favolist.com/屋顶;温岚;80;励志217.0903.2962015-8-1http://www.apinpai.com/小兔子乖乖;小蓓蕾组合;90;儿歌184.0473.0772015-8-6http://www.99inf.com/光辉岁月;beyond;80;励志72.01051.7382015-6-28http://www.qudee.com/逃脱;李玟;90;伤感123.0483.2392015-8-7http://www.alifenfen.com/星;邓丽君;80;励志257.01779.36

display(df.fillna(value=50000, limit=2).head(10))
0123           402015-4-28http://www.apinpai.com/采蘑菇的小姑娘;小蓓蕾组合;90;儿歌216.01392.6812015-8-24http://www.apinpai.com/我;张国荣;80;励志273.01447.1722015-12-14http://www.movie.com/dor/《恶棍天使》;2015.12.24;2016.2.13;天津橙子映像传媒有限公司、北京光线影...50000.050000.0032015-4-2http://bj.qu114.com/my way;张敬轩;90;励志52.0337.2742015-12-19http://www.movie.com/dor/《失孤》;2015.3.20;2015.5.3;华谊兄弟传媒集团、源合圣影视、映艺娱乐;彭三...50000.050000.0052015-5-28http://www.favolist.com/屋顶;温岚;80;励志217.0903.2962015-8-1http://www.apinpai.com/小兔子乖乖;小蓓蕾组合;90;儿歌184.0473.0772015-8-6http://www.99inf.com/光辉岁月;beyond;80;励志72.01051.7382015-6-28http://www.qudee.com/逃脱;李玟;90;伤感123.0483.2392015-8-7http://www.alifenfen.com/星;邓丽君;80;励志257.01779.36