由于自己是从R转Python,平时用惯了R对数据进行处理、转化等操作,如今过渡到Python上还有些许的不适应。但还是不得不感叹pandas
的强大之处,一个库顶的上R中数个包合并在一起使用。
因为平时的使用比较杂,都是随用随查,所以在pandas
库的使用上也是比较零碎,这里记录下分析一份数据,使用比较多的一些pandas
的操作。
官方网站:http://pandas.pydata.org/
数据读取这部分非常不同于R,个人感觉非常便捷,并且使用起来也很顺手。读取csv
所使用的函数: read_csv
, 其读取速度远远快过R中自带的函数 read.csv
,和data.table
包中 fread
有的一拼(虽然 fread
可能还是稍微快一点点),但pandas还有read_excel
这个函数可以直接读取 xls
与 xlsx
等类型的文件,这比R还需要调用一些包来读取快捷多了。
具体的一些操作如下,首先我们需要先将pandas
库进行导入,通常操作都是as pd
import pandas as pd
然后我们就可以进行csv
文件的读取了!
read_csv
df = pd.read_csv('myfile.csv')
这是最简单的读取方式,但是遇到很多奇奇怪怪的文件格式,就要修改其中的参数了。
encoding
编码问题,是MacOS、Lunix、Windows几个系统之间相互转化文件最容易出现的问题。通常,我们使用的编码是:utf-8
,这样的编码在MacOS与Lunix系统中,通常是没有问题的,但是读取Windows中的文件一定要注意!,通常需要使用 encoding = 'mbcs'
才能正常读取文件,Windows很多都是ANSI编码。
关于编码问题,这个网址有详细的说明:https://docs.python.org/3/library/codecs.html#standard-encodings
另外这里再说个关于转码的小技巧(当然可以使用Python,用 encoding = 'mbcs'
进行读取,用 encoding = 'utf-8'
进行存储)。这里对我们的文件(csv
,txt
等)用记事本打开,然后点击另存为,在下方有一个编码:使用 UTF-8
或者 ANSI
,总之是你目标的编码即可。
sep
默认我们的csv
文件使用的是逗号分隔的,如果原本的数据不是csv格式,是用其它字符分隔的(例如空格),那我可以使用 sep =
其它分隔符号来进行修改。
header
另一个常用的参数是header =
,函数默认是将文件的第一行作为每一列的列名,如果我们需要取消这个操作,也就是文件的第一行我们不令它变成列名,则需使用header = None
。另外有个小技巧,就是原本我们的文件每一列有多个标题,我们可以设置一个list,比如:header = [0, 2]
,那么就表示将文件中的这些行作为列标题,在中间的行将被忽略掉(本例中数据第1,3行将被作为多级标题出现,第2行数据将被丢弃,真正的数据从第4行开始)。
names
那如果我们需要自己来定义列名,就需要使用类似names = ['身高', '体重']
的操作,同时注意需要使用header=None
index_col
有时候,我们也希望文件中的第一列内容,不做为index,而是重新使用0~(n-1)来作为新的index,可以使用 index_col = False
。但是使用时需要注意,这样做,会顶掉最后一列数据!使得读取进来直接少了一列数据。 解决的方法是:我们还是使用 read_csv
正常读取,然后对读取进来的 df
,使用df = df.reset_index()
,可以直接使0~(n-1)作为我们的index,也就是行名。
关于 read_csv
中的参数,自己用到的就介绍到这里,还有更多的参数,可以参考官方说明文档:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
read_excel
df = pd.read_excel('myfile.xlsx', 'Sheet1')
read_excel
的参数与前面的 read_csv
基本一致,就是要使用第二个参数,来指定读取的Sheet(通常默认都是'Sheet1'
,但建议读取之前,还是先看看第一个Sheet的名称是什么)。
其实也可以使用sheetname=[0,2]
,表示读取第一个和第三个sheet,跳过了第二个,因为sheet数目从0开始。这样读进来的其实是一个 OrderedDict
,里面包含两个DataFrame
.,使用 df[0]
,就是我们读入的第一个Sheet。
后面会继续对pandas库中的其它函数进行介绍。