Pandas——温故一遍(二)

数据载入、存储及文件格式

文本格式数据的读写

csv、txt文件的操作

数据载入
  • 方法
  1. pandas.read_csv:读取分隔好的数据,默认分隔符是逗号
  2. pandas.read_table:读取分隔好的数据,默认分隔符是制表符\t
  • 常用参数
  1. sep = ‘,’ :使用逗号作为分隔符,也可传入正则表达式;
  2. header = None :pandas默认自动将第一行数据作为列名,header置为None,pandas会自动分配列名;
  3. names = [‘a’,‘b’,…]:自己指定列名;
  4. index_col = '列名‘|[’列名1‘,’列名2‘]:指定某一列或多列作为行索引;
  5. skiprows = [0,1]:跳过前两行,可能前两行只是注释而已;
  6. na_values = [‘NULL’]:将值为NULL的改成NaN,也可以传入一个字典,key为列名,value为列表;
  7. path:文件路径;
  8. nrows = 5:指定读取一小部分,这里读取5行数据;
  9. chunksize = 1000:分块读取,指定每一块的行数,返回一个可迭代的TextParser对象
数据写入文本格式
  • 方法
  1. to_csv
  • 常用参数
  1. sep = ’,‘:指定分隔符;
  2. na_rep = ‘NULL’:使用NULL对缺失值进行标注;
  3. index = False :行索引不会被写入;
  4. header = False:列索引不会被写入;
  5. columns = [‘a’,‘b’,…]:指定列索引;

XLS、XLSX文件的操作

数据载入
  • 方法
  1. pandas.ExcelFile(path):返回一个xlsx实例;
  2. pandas.read_excel(xlsx实例,‘sheet1’):第二个参数是表格页,一般名为sheet1;
数据写入
  • 方法
writer = pandas.ExcelWriter("文件名")
obj.to_excel(writer,'Sheet1")
writer.save()

JSON文件的操作

  • 数据载入
  1. pandas.read_json
  • 数据输出
  1. to_json

XML文件的操作

一般使用lxml库解析此文件。

  • 数据载入
  1. pandas.read_html

数据清洗与准备

处理缺失值

  • 过滤缺失值dropna

方法:obj.dropna(),默认会删除包含缺失值的行。
参数:
1、how = ’all‘:将删除所有值均为NAN的行;
2、axis = 1 :将以同样方式处理列;
3、thresh = 2:表示保留的行中,除去缺失值,剩余的值的数量应大于等于2;

  • 补全缺失值fillna

方法:obj.fillna(0) ,将缺失值用0补充,返回的是一个新对象。
参数:
1、第一个参数除了可以是单值,也可以使用字典,来为不同的列设定不同的填充值。{’列名1‘:填充值1,’列名2‘:填充值2}
2、inplace = True:不返回新对象,直接修改原对象。
3、method = ’ffill‘:缺失值补充的值为前面存在的有效值。
4、axis:默认是0.
5、limit = 1:用于向前或向后时最大的填充范围.

数据转换

删除重复值drop_duplicates

DataFrame的duplicated方法返回的是一个布尔值Series,这个Series反映的是每一行是否存在重复(与之前出现过的行相同)情况。

drop_duplicates返回的是DataFrame,内容是duplicated返回数组中为False的部分,即实现了删除重复行。

  • 方法

obj.drop_duplicates(),默认删除重复的行,两者重复,删除后者。
参数:
1、指定列名([‘列名’]):基于指定列删除重复值。
2、keep = ’last‘ :两者重复,删除前者,保留后者。

使用函数或映射进行数据转换

基于DataFrame中的数组、列或列中的数值进行一些转换。Series的map方法接收一个函数或一个包含映射关系的字典型对象。

方法:data[‘列名’].map(方法或字典)

替代值

  • 方法

replace(),针对Series,replace提供了更为简单灵活的实现。
参数:
1、(异常值,替代值):一次性替代单值
2、([异常值1,异常值2,…],替代值):一次性替代多个值
3、([异常值1,异常值2,…],[替代值1,替代值2,…]):将不同的值替换为不同的值
4、({异常值1:替代值1,异常值2:替代值2…}):将不同的值替换为不同的值

重命名轴索引

  • map方法

可以通过函数或某种形式的映射对轴标签进行类似的转换,生成新的且带有不同标签的对象。

obj.index.map(方法或字典)
  • rename方法
//方式1
obj.rename(index = {原值1:新值1,原值3:新值2...},columns = {原值1:新值1...})
//方式2
obj.rename(index = str.title,columns = str.upper)

参数:
1、inplace=True :直接修改原数据

离散化和分箱

连续值经常需要离散化,或者分离成”箱子“进行分析。例如你有某项研究中一组人群的数据,你想将他们进行分组,放入离散的年龄框中。

  • 步骤
  1. 划分分组的范围

假设将年龄分为18~25、26~35、36~60以及61及以上等若干组。

bins = [18,25,35,60,130]
  1. 利用cut方法生成Categorical对象
cats = pandas.cut(obj,bins)
  1. 利用pandas.value_counts方法进行分组后的统计
pandas.value_counts(cats)
  1. cats的codes属性可以看到每个元素所属的类,即箱子。返回的对象是一个array。
cats.codes
  • cut方法参数

1、right=False :默认区间是左开右闭,现在修改为左闭右开
2、labels = [箱名1,箱名2,箱名3…]:自定义的箱名
3、如果你传给cut整数个的箱来代替显式的箱边,pandas将根据数据中的最小值和最大值计算出等长的箱
4、precision=2 :将十进制精度限制在两位

  • qcut方法

qcut是一个与分箱密切相关的函数,它基于样本分位数进行分箱。取决于数据的分布。由于qcut使用样本的分位数,你可以通过qcut获得等长的箱。

检测和过滤异常值

  • 在某一列找异常值

如在第二列找绝对值大于3的值。

col = obj[1]
col[np.abs(col) > 3]
  • 找到包含绝对值大于3的所有行
obj[ (np.abs[obj] > 3).any(1)]
  • 将异常值进行修改

下面将异常值都改为3或-3

obj[ np.abs[obj] > 3] = np.sign(data)*3

随机抽样

  • 方式1

从现有数据中随机取出一定数量的样本,样本可以可能重复。

obj.sample(n = 10,replace = True) //抽取10行数据作为样本,生成一个带有替代值的样本
  • 方式2

将现有数据的行索引进行随机的重排序,再取出前面一定数量的样本,这种方式可以避免取出重复的样本。

//假设数据共有5行
sampler = numpy.random.permutation(5)
obj.take(sampler)

pandas中的向量化字符串函数


上图中的字符串很多方法通过Series的str属性进行调用。
也能使用正则进去提取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值