目录
数据载入、存储及文件格式
文本格式数据的读写
csv、txt文件的操作
数据载入
- 方法
- pandas.read_csv:读取分隔好的数据,默认分隔符是逗号
- pandas.read_table:读取分隔好的数据,默认分隔符是制表符\t
- 常用参数
- sep = ‘,’ :使用逗号作为分隔符,也可传入正则表达式;
- header = None :pandas默认自动将第一行数据作为列名,header置为None,pandas会自动分配列名;
- names = [‘a’,‘b’,…]:自己指定列名;
- index_col = '列名‘|[’列名1‘,’列名2‘]:指定某一列或多列作为行索引;
- skiprows = [0,1]:跳过前两行,可能前两行只是注释而已;
- na_values = [‘NULL’]:将值为NULL的改成NaN,也可以传入一个字典,key为列名,value为列表;
- path:文件路径;
- nrows = 5:指定读取一小部分,这里读取5行数据;
- chunksize = 1000:分块读取,指定每一块的行数,返回一个可迭代的TextParser对象
数据写入文本格式
- 方法
- to_csv
- 常用参数
- sep = ’,‘:指定分隔符;
- na_rep = ‘NULL’:使用NULL对缺失值进行标注;
- index = False :行索引不会被写入;
- header = False:列索引不会被写入;
- columns = [‘a’,‘b’,…]:指定列索引;
XLS、XLSX文件的操作
数据载入
- 方法
- pandas.ExcelFile(path):返回一个xlsx实例;
- pandas.read_excel(xlsx实例,‘sheet1’):第二个参数是表格页,一般名为sheet1;
数据写入
- 方法
writer = pandas.ExcelWriter("文件名")
obj.to_excel(writer,'Sheet1")
writer.save()
JSON文件的操作
- 数据载入
- pandas.read_json
- 数据输出
- to_json
XML文件的操作
一般使用lxml库解析此文件。
- 数据载入
- 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 :直接修改原数据
离散化和分箱
连续值经常需要离散化,或者分离成”箱子“进行分析。例如你有某项研究中一组人群的数据,你想将他们进行分组,放入离散的年龄框中。
- 步骤
- 划分分组的范围
假设将年龄分为18~25、26~35、36~60以及61及以上等若干组。
bins = [18,25,35,60,130]
- 利用cut方法生成Categorical对象
cats = pandas.cut(obj,bins)
- 利用pandas.value_counts方法进行分组后的统计
pandas.value_counts(cats)
- 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属性进行调用。
也能使用正则进去提取