您的位置:首页 > 编程语言 > Python开发

学习笔记:利用Python进行数据分析

2018-04-04 11:01 786 查看
 目录
2.2 快捷键,items,defaultdict用法,Counter用法... 2
Jupyter Notebook快捷键:... 2
dict.items()#得到词典的各项... 4
defaultdict用法:... 4
Counter模块(Counter,most_common):... 4
2.3 利用pandas对时区进行计数... 5
DataFrame数据结构... 5
Series对象的fillna函数... 5
填充无效值... 6
清理无效数据... 6
drop函数使用... 6
Series对象的value_counts函数... 7
pd.read_table函数... 7
df.loc( iloc  ix)[索引]12
df.pivot_table()函数... 13
 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

2.1 快捷键,items,defaultdict用法,Counter用法

Jupyter Notebook快捷键:JupyterNotebook 有两种键盘输入模式。编辑模式,允许你往单元中键入代码或文本;这时的单元框线是绿色的。命令模式,键盘输入运行程序命令;这时的单元框线是灰色。Ø  命令模式 (按键 Esc 开启)·       Enter :转入编辑模式·       Shift-Enter :运行本单元,选中下个单元·       Ctrl-Enter :运行本单元·       Alt-Enter :运行本单元,在其下插入新单元·       Y : 单元转入代码状态·       M :单元转入markdown状态·       R : 单元转入raw状态·       1 : 设定 1 级标题·       2 : 设定 2 级标题·       3 : 设定 3 级标题·       4 : 设定 4 级标题·       5 : 设定 5 级标题·       6 : 设定 6 级标题·       Up : 选中上方单元·       K : 选中上方单元·       Down :选中下方单元·       J : 选中下方单元·       Shift-K :扩大选中上方单元·       Shift-J :扩大选中下方单元·       A : 在上方插入新单元·       B : 在下方插入新单元·       X : 剪切选中的单元·       C : 复制选中的单元·       Shift-V :粘贴到上方单元·       V : 粘贴到下方单元·       Z : 恢复删除的最后一个单元·       D,D :删除选中的单元·       Shift-M :合并选中的单元·       Ctrl-S :文件存盘·       S : 文件存盘·       L : 转换行号·       O : 转换输出·       Shift-O :转换输出滚动·       Esc :关闭页面·       Q : 关闭页面·       H : 显示快捷键帮助·       I,I :中断Notebook内核·       0,0 :重启Notebook内核·       Shift :忽略·       Shift-Space :向上滚动·       Space :向下滚动
Ø  编辑模式 ( Enter 键启动)·       Tab :代码补全或缩进·       Shift-Tab :提示·       Ctrl-] :缩进·       Ctrl-[ :解除缩进·       Ctrl-A :全选·       Ctrl-Z :复原·       Ctrl-Shift-Z :再做·       Ctrl-Y :再做·       Ctrl-Home :跳到单元开头·       Ctrl-Up :跳到单元开头·       Ctrl-End :跳到单元末尾·       Ctrl-Down :跳到单元末尾·       Ctrl-Left :跳到左边一个字首·       Ctrl-Right :跳到右边一个字首·       Ctrl-Backspace :删除前面一个字·       Ctrl-Delete :删除后面一个字·       Esc :进入命令模式·       Ctrl-M :进入命令模式·       Shift-Enter :运行本单元,选中下一单元·       Ctrl-Enter :运行本单元·       Alt-Enter :运行本单元,在下面插入一单元·       Ctrl-Shift-- :分割单元·       Ctrl-Shift-Subtract : 分割单元·       Ctrl-S :文件存盘·       Shift :忽略·       Up : 光标上移或转入上一单元·       Down :光标下移或转入下一单元
dict.items()#得到词典的各项
defaultdict用法:
1. from collections import defaultdict
2. def get_counts2(seq):
3.     counts=defaultdict(int)#所有值默认为0
4.     for se in seq:
5.             counts[se]+=1
6.     return counts
Counter模块(Counter,most_common):
1.  from collections import Counter
2.  counts=Counter(time_zone)# 统计各项唯一元素的个数
3.  counts.most_common(10)

2.2 利用pandas对时区进行计数

DataFrame数据结构
DataFrame将数据记录转换为表格
from pandas import DataFrame,Series
import pandas as pd;import numpy as np
frame=DataFrame(records)
frame[‘tz’]是Series对象
Series对象的fillna函数
DataFrame.fillna(value=None,method=None,axis=None,inplace=False,limit=None,downcast=None, **kwargs)
Fill NA/NaN values usingthe specified methodvalue : scalar, dict, Series, orDataFrameValue to use to fill holes (e.g. 0),alternately a dict/Series/DataFrame of values specifying which value to use foreach index (for a Series) or column (for a DataFrame). (values not in thedict/Series/DataFrame will not be filled). This value cannot be a list.method : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default NoneMethod to use for filling holes inreindexed Series pad / ffill: propagate last valid observation forward to nextvalid backfill / bfill: use NEXT valid observation to fill gapaxis : {0 or ‘index’, 1 or ‘columns’}inplace : boolean, default FalseIf True, fill in place. Note: this willmodify any other views on this object, (e.g. a no-copy slice for a column in aDataFrame).limit : int, default NoneIf method is specified, this is themaximum number of consecutive NaN values to forward/backward fill. In otherwords, if there is a gap with more than this number of consecutive NaNs, itwill only be partially filled. If method is not specified, this is the maximumnumber of entries along the entire axis where NaNs will be filled.downcast : dict, default is Nonea dict of item->dtype of what to downcast if possible, or the string ‘infer’ which will try to downcast to an appropriate equal type (e.g.float64 to int64 if possible)
例子:
clean_tz=frame['tz'].fillna('Missing')
clean_tz[clean_tz=='']='Unknown'
填充无效值df.fillna(0)df.fillna({1:0, 2:0.5})     #对第一列nan值赋0,第二列赋值0.5
df.fillna(method='ffill')   #在列方向上以前一个值作为值赋给NaN
清理无效数据df[df.isnull()]  #返回的是个true或false的Series对象(掩码对象),进而筛选出我们需要的特定数据。df[df.notnull()] df.dropna()     #将所有含有nan项的row删除df.dropna(axis=1,thresh=3)  #将在列的方向上三个为NaN的项删除
df.dropna(how='ALL')        #将全部项都是nan的row删除
drop函数使用
(1)drop函数的使用:删除行、删除列
print frame.
drop
([
'a'
])
print frame.
drop
([
'Ohio'
], axis =
1
)
drop函数默认删除行,列需要加axis =1
(2)drop函数的使用:inplace参数
采用drop方法,有下面三种等价的表达式:1.
DF= DF.drop(
'column_name'
, axis=
1
)
2.[code] DF.drop(
'column_name'
,axis=
1
, inplace=True)
3.[code] DF.drop([DF.columns
[[0,1,3]]
], axis=
1
, inplace=True)   # Note: zero indexed
注意:凡是会对原数组作出修改并返回一个新数组的,往往都有一个inplace可选参数。如果手动设定为True(默认为False),那么原数组直接就被替换。也就是说,采用inplace=True之后,原数组名(如2和3情况所示)对应的内存值直接改变;
而采用inplace=False之后,原数组名对应的内存值并不改变,需要将新的结果赋给一个新的数组或者覆盖原数组的内存位置(如1情况所示)。
(3)drop函数的使用:数据类型转换
df[
'Name'
] = df[
'Name'
].astype(np.datetime64)
DataFrame.astype() 方法可对整个DataFrame或某一列进行数据格式转换,支持Python和NumPy的数据类型。
Series对象的value_counts函数
# 统计各项唯一元素的个数,按照个数降序排列
tz_counts=clean_tz.value_counts()[:10]#取前10个,可参考Counters
pd.read_table函数
pandas.
read_table
(filepath_or_buffer, sep='\t', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, skip_footer=0, doublequote=True, delim_whitespace=False, as_recarray=None, compact_ints=None, use_unsigned=None, low_memory=True, buffer_lines=None, memory_map=False, float_precision=None)
filepath_or_buffer : str,pathlib。str, pathlib.Path,py._path.local.LocalPath or any object with a read() method (such as a filehandle or StringIO) 
可以是URL,可用URL类型包括:http, ftp, s3和文件。对于多文件正在准备中 
本地文件读取实例:://localhost/path/to/table.csvsep : str, default ‘,’ 
指定分隔符。如果不指定参数,则会尝试使用逗号分隔。分隔符长于一个字符并且不是‘\s+’,将使用Python的语法分析器。并且忽略数据中的逗号。正则表达式例子:’\r\t’delimiter : str, default None 
定界符,备选分隔符(如果指定该参数,则sep参数失效)delim_whitespace : boolean, default False. 
指定空格(例如’ ‘或者’ ‘)是否作为分隔符使用,等效于设定sep=’\s+’。如果这个参数设定为Ture那么delimiter 参数失效。 
在新版本0.18.1支持header : int or list of ints, default ‘infer’ 
指定行数用来作为列名,数据开始行数。如果文件中没有列名,则默认为0,否则设置为None。如果明确设定header=0 就会替换掉原来存在列名。header参数可以是一个list例如:[0,1,3],这个list表示将文件中的这些行作为列标题(意味着每一列有多个标题),介于中间的行将被忽略掉(例如本例中的2;本例中的数据1,2,4行将被作为多级标题出现,第3行数据将被丢弃,dataframe的数据从第5行开始。)。 
注意:如果skip_blank_lines=True 那么header参数忽略注释行和空行,所以header=0表示第一行数据而不是文件的第一行。names : array-like,default None 
用于结果的列名列表,如果数据文件中没有列标题行,就需要执行header=None。默认列表中不能出现重复,除非设定参数mangle_dupe_cols=True。index_col : int or sequence or False, default None 
用作行索引的列编号或者列名,如果给定一个序列则有多个行索引。 
如果文件不规则,行尾有分隔符,则可以设定index_col=False 来是的pandas不适用第一列作为行索引。usecols : array-like, default None 
返回一个数据子集,该列表中的值必须可以对应到文件中的位置(数字可以对应到指定的列)或者是字符传为文件中的列名。例如:usecols有效参数可能是 [0,1,2]或者是 [‘foo’, ‘bar’, ‘baz’]。使用这个参数可以加快加载速度并降低内存消耗。as_recarray : boolean, default False 
不赞成使用:该参数会在未来版本移除。请使用pd.read_csv(…).to_records()替代。 
返回一个Numpy的recarray来替代DataFrame。如果该参数设定为True。将会优先squeeze参数使用。并且行索引将不再可用,索引列也将被忽略。squeeze : boolean, default False 
如果文件值包含一列,则返回一个Seriesprefix : str, default None 
在没有列标题时,给列添加前缀。例如:添加‘X’ 成为 X0, X1, …mangle_dupe_cols : boolean, default True 
重复的列,将‘X’…’X’表示为‘X.0’…’X.N’。如果设定为false则会将所有重名列覆盖。dtype : Type name or dict of column -> type, defaultNone 
每列数据的数据类型。例如 {‘a’: np.float64, ‘b’: np.int32}engine : {‘c’, ‘python’}, optional 
Parser engine to use. The C engine is faster while the python engine iscurrently more feature-complete. 
使用的分析引擎。可以选择C或者是python。C引擎快但是Python引擎功能更加完备。converters : dict, default None 
列转换函数的字典。key可以是列名或者列的序号。true_values : list, default None 
Values to consider as Truefalse_values : list, default None 
Values to consider as Falseskipinitialspace : boolean, default False 
忽略分隔符后的空白(默认为False,即不忽略).skiprows : list-like or integer, default None 
需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始)。skipfooter : int, default 0 
从文件尾部开始忽略。 (c引擎不支持)skip_footer : int, default 0 
不推荐使用:建议使用skipfooter ,功能一样。nrows : int, default None 
需要读取的行数(从文件头开始算起)。na_values : scalar, str, list-like, or dict, default None 
一组用于替换NA/NaN的值。如果传参,需要制定特定列的空值。默认为‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘nan’`.keep_default_na : bool, default True 
如果指定na_values参数,并且keep_default_na=False,那么默认的NaN将被覆盖,否则添加。na_filter : boolean, default True 
是否检查丢失值(空字符串或者是空值)。对于大文件来说数据集中没有空值,设定na_filter=False可以提升读取速度。verbose : boolean, default False 
是否打印各种解析器的输出信息,例如:“非数值列中缺失值的数量”等。skip_blank_lines : boolean, default True 
如果为True,则跳过空行;否则记为NaN。parse_dates : boolean or list of ints or names or list of lists ordict, default False 
boolean. True -> 解析索引 
list of ints or names. e.g. If [1, 2, 3] -> 解析1,2,3列的值作为独立的日期列; 
list of lists. e.g. If [[1, 3]] -> 合并1,3列作为一个日期列使用 
dict, e.g. {‘foo’ : [1, 3]} -> 将1,3列合并,并给合并后的列起名为”foo”infer_datetime_format : boolean, default False 
如果设定为True并且parse_dates 可用,那么pandas将尝试转换为日期类型,如果可以转换,转换方法并解析。在某些情况下会快5~10倍。keep_date_col : boolean, default False 
如果连接多列解析日期,则保持参与连接的列。默认为False。date_parser : function, default None 
用于解析日期的函数,默认使用dateutil.parser.parser来做转换。Pandas尝试使用三种不同的方式解析,如果遇到问题则使用下一种方式。 
1.使用一个或者多个arrays(由parse_dates指定)作为参数; 
2.连接指定多列字符串作为一个列作为参数; 
3.每行调用一次date_parser函数来解析一个或者多个字符串(由parse_dates指定)作为参数。dayfirst : boolean, default False 
DD/MM格式的日期类型iterator : boolean, default False 
返回一个TextFileReader 对象,以便逐块处理文件。chunksize : int, default None 
文件块的大小, See IO Tools docs for more informationon iterator andchunksize.compression : {‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None}, default‘infer’ 
直接使用磁盘上的压缩文件。如果使用infer参数,则使用 gzip, bz2, zip或者解压文件名中以‘.gz’, ‘.bz2’, ‘.zip’, or ‘xz’这些为后缀的文件,否则不解压。如果使用zip,那么ZIP包中国必须只包含一个文件。设置为None则不解压。 
新版本0.18.1版本支持zip和xz解压thousands : str, default None 
千分位分割符,如“,”或者“.”decimal : str, default ‘.’ 
字符中的小数点 (例如:欧洲数据使用’,‘).float_precision : string, default None 
Specifies which converter the C engine should use for floating-point values.The options are None for the ordinary converter, high for the high-precisionconverter, and round_trip for the round-trip converter. 
指定lineterminator : str (length 1), default None 
行分割符,只在C解析器下使用。quotechar : str (length 1), optional 
引号,用作标识开始和解释的字符,引号内的分割符将被忽略。quoting : int or csv.QUOTE_* instance, default 0 
控制csv中的引号常量。可选 QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) orQUOTE_NONE (3)doublequote : boolean, default True 
双引号,当单引号已经被定义,并且quoting 参数不是QUOTE_NONE的时候,使用双引号表示引号内的元素作为一个元素使用。escapechar : str (length 1), default None 
当quoting 为QUOTE_NONE时,指定一个字符使的不受分隔符限值。comment : str, default None 
标识着多余的行不被解析。如果该字符出现在行首,这一行将被全部忽略。这个参数只能是一个字符,空行(就像skip_blank_lines=True)注释行被header和skiprows忽略一样。例如如果指定comment=’#’ 解析‘#empty\na,b,c\n1,2,3’以header=0 那么返回结果将是以’a,b,c’作为header。encoding : str, default None 
指定字符集类型,通常指定为’utf-8’. List of Python standard encodingsdialect : str or csv.Dialect instance, default None 
如果没有指定特定的语言,如果sep大于一个字符则忽略。具体查看csv.Dialect 文档tupleize_cols : boolean, default False 
Leave a list of tuples on columns as is (default is to convert to a Multi Indexon the columns)error_bad_lines : boolean, default True 
如果一行包含太多的列,那么默认不会返回DataFrame ,如果设置成false,那么会将改行剔除(只能在C解析器下使用)。warn_bad_lines : boolean, default True 
如果error_bad_lines =False,并且warn_bad_lines =True 那么所有的“bad lines”将会被输出(只能在C解析器下使用)。low_memory : boolean, default True 
分块加载到内存,再低内存消耗中解析。但是可能出现类型混淆。确保类型不被混淆需要设置为False。或者使用dtype 参数指定类型。注意使用chunksize 或者iterator 参数分块读入会将整个文件读入到一个Dataframe,而忽略类型(只能在C解析器中有效)buffer_lines : int, default None 
不推荐使用,这个参数将会在未来版本移除,因为他的值在解析器中不推荐使用compact_ints : boolean, default False 
不推荐使用,这个参数将会在未来版本移除 
如果设置compact_ints=True ,那么任何有整数类型构成的列将被按照最小的整数类型存储,是否有符号将取决于use_unsigned参数use_unsigned : boolean, default False 
不推荐使用:这个参数将会在未来版本移除 
如果整数列被压缩(i.e. compact_ints=True),指定被压缩的列是有符号还是无符号的。 
memory_map : boolean, default False 
如果使用的文件在内存内,那么直接map文件使用。使用这种方式可以避免文件再次进行IO操作。
df.loc( iloc  ix)[索引]
loc为索引。当每列已有column name时,用 df [ 'a' ] 就能选取出一整列数据。如果你知道column names 和index,且两者都很好输入,可以选择 .loc。
iloc为位置索引(用数字指代)。如果column name太长了,输入不方便,有或者index是一列时间序列,更不好输入,那就可以选择 .iloc了。iloc使得我们可以对column使用slice(切片)的方法对数据进行选取。ix它允许我们混合使用下标和名称进行选取。 可以说它涵盖了前面所有的用法。基本上把前面的都换成df.ix 都能成功,但是有一点,就是df.ix [ [ ..1.. ], [..2..] ],  1框内必须统一,必须同时是下标或者名称,2框也一样。 BTW, 1框是用来指定row,2框是指定column。但是ix在python3中弃用。
df.pivot_table()函数
DataFrame.pivot_table(data,values=None,index=None,columns=None,aggfunc=’mean’,fill_value=None,margins=False,dropna=True,margins_name=’All’)
data: DataFrame对象 
values: 显示的列的名字。可以应用aggfunc中的函数 
index: 透视表的行索引。 
columns: 透视表的列索引。可选的,通过额外的方法来分割你所关心的实际值,然而aggfunc被应用到values上
aggfunc:默认的是mean,可以用sum等。
fill_value:NA值的同一替换。
series.sort_values[]函数
series.sort_values[by=’排序的列’,ascending=False]
默认降序排列

2.3 1880-2010年间全美婴儿姓名

读入数据小结
Ø  将json对象转为Python对象:(txt)
import json
records=[json.load(line) for line in open(path)]# open(path).readline()
Ø  将表格(不同字符串中有分割符进行区分)转换为df对象:(dat)
import pandas
records=pd.read_table(‘路径’,sep=’分隔符’,names=[‘列1的名称’,’列2’,’列3’])
Ø  将表格(标准的以逗号隔开)转换为df对象:(txt,csv)
import pandas
records=pd.read_csv(‘路径’,names=[‘列1的名称’,’列2’,’列3’])
注意:
用read_csv时路径中不能有中文,若有,改为:
f=open(path)
records=pd.read_table(f,sep=’分隔符’,names=[‘列1的名称’,’列2’,’列3’])
pd.concat() pd.merge()函数
pd.concat(df,ignore_index=True)函数默认按行将多个df组合到一起,另外ignore_index=True表示不保留各df对象原始行号。
pd.sort()和sorted()区别
sort()排序会改变原来的顺序,但是sorted()就不会,使用的时候二者是有区别的[html] view plain copy
1.  a = [1,3,2,4]  2.  a.sort()           #a=[1,2,3,4]  3.  a = [1,3,2,4]  4.  b = sorted(a)   #a=[1,3,2,4],b=[1,2,3,4]  df.searchsorted
寻找某个数应该插在数组的什么位置上,这个数组必须是按序排列的
解决省略号输出问题[html] view plain copy
1.  import numpy as np    2.  np.set_printoptions(threshold=np.inf)  zip函数
将几个输入的列表重新组合成一个新的列表,新列表每个元素都是一个元组tuple 
defaultdict()
一般情况下调用字典中没有的键值的时候会发生类型错误,可以选择使用defaultdict来进行[python] view plain copy
1.  a = defaultdict(list)  2.  a['lala']                       #[] 默认是list   3.  b = defaultdict(tuple)   4.  b['lala']                      #() 默认是tuple   map[html] view plain copy
1.  a = [1,2,3]  2.  b = map(str,a)  #第一个参数是函数,第二个参数是可迭代对象,经常用于对列表中每个对象的操作  set set是无序不重复元素集,因此可以用它进行重复元素的消除,由于是无序的,所以很多的index,slice操作都是不可行的
np.where
返回符合要求的索引
map[python] view plain copy
1.  map(lambda x: tuple(x), p.areaRng)  map是对每一个p.areaRng的元素都执行某个操作,lambda其实简化了对函数的定义,其实就是定义了一个新的函数而已
这句话就是对p.areaRng每个元素都执行lambda定义的函数的操作
df.reindex函数
DataFrame.reindex(index=None, columns=None,**kwargs) 
reindex 函数的参数
参数说明
method插值填充方法
fill_value引入的缺失数据值
limit填充间隙
copy如果新索引与就的相等则底层数据不会拷贝。默认为True(即始终拷贝)
level在多层索引上匹配简单索引
isin函数(通过选择条件,而loc是返回对应index的行)
使用isin()选出特定列中包含特定值的行
a1=a.copy()
a1[a1['one'].isin(['2','3'])] 表显示满足条件:列one中的值包含'2','3'的所有行。
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: