Python3 pandas用法大全详解编程语言
1、首先导入pandas库,一般都会用到numpy库,所以我们先导入备用:
import numpy as np import pandas as pd
2、导入CSV或者xlsx文件:
df = pd.DataFrame(pd.read_csv(name.csv,header=1)) df = pd.DataFrame(pd.read_excel(name.xlsx)) #pandas还可以读取一下文件: read_csv, read_excel, read_hdf, read_sql, read_json, read_msgpack (experimental), read_html, read_gbq (experimental), read_stata, read_sas, read_clipboard, read_pickle; #相应的写入: to_csv, to_excel, to_hdf, to_sql, to_json, to_msgpack (experimental), to_html, to_gbq (experimental), to_stata, to_clipboard, to_pickle.
(1)pandas.read_csv()参数整理:
读取CSV(逗号分割)文件到DataFrame,也支持文件的部分导入和选择迭代。filepath_or_buffer : str,pathlib。str, pathlib.Path, py._path.local.LocalPath or any object with a read() method (such as a file handle or StringIO)
指定分隔符。如果不指定参数,则会尝试使用逗号分隔。分隔符长于一个字符并且不是‘/s+’,将使用python的语法分析器。并且忽略数据中的逗号。正则表达式例子: /r/t
指定空格(例如’ ‘或者’ ‘)是否作为分隔符使用,等效于设定sep= /s+ 。如果这个参数设定为Ture那么delimiter 参数失效。在新版本0.18.1支持
指定行数用来作为列名,数据开始行数。如果文件中没有列名,则默认为0,否则设置为None。如果明确设定header=0 就会替换掉原来存在列名。header参数可以是一个list例如:[0,1,3],
这个list表示将文件中的这些行作为列标题(意味着每一列有多个标题),介于中间的行将被忽略掉
注意:如果skip_blank_lines=True 那么header参数忽略注释行和空行,所以header=0表示第一行数据而不是文件的第一行。
用于结果的列名列表,如果数据文件中没有列标题行,就需要执行header=None。默认列表中不能出现重复,除非设定参数mangle_dupe_cols=True。
如果文件不规则,行尾有分隔符,则可以设定index_col=False 来是的pandas不适用第一列作为行索引。
返回一个数据子集,该列表中的值必须可以对应到文件中的位置(数字可以对应到指定的列)或者是字符传为文件中的列名。
例如:usecols有效参数可能是 [0,1,2]或者是 [‘foo’, ‘bar’, ‘baz’]。使用这个参数可以加快加载速度并降低内存消耗。
返回一个Numpy的recarray来替代DataFrame。如果该参数设定为True。将会优先squeeze参数使用。并且行索引将不再可用,索引列也将被忽略。
Parser engine to use. The C engine is faster while the python engine is currently more feature-complete.
一组用于替换NA/NaN的值。如果传参,需要制定特定列的空值。默认为‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘nan’`.
是否检查丢失值(空字符串或者是空值)。对于大文件来说数据集中没有空值,设定na_filter=False可以提升读取速度。
parse_dates : boolean or list of ints or names or list of lists or dict, 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
如果设定为True并且parse_dates 可用,那么pandas将尝试转换为日期类型,如果可以转换,转换方法并解析。在某些情况下会快5~10倍。
用于解析日期的函数,默认使用dateutil.parser.parser来做转换。Pandas尝试使用三种不同的方式解析,如果遇到问题则使用下一种方式。
文件块的大小,
See IO Tools docs for more informationon iterator and chunksize.
compression : {‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None}, default ‘infer’
直接使用磁盘上的压缩文件。如果使用infer参数,则使用 gzip, bz2, zip或者解压文件名中以‘.gz’, ‘.bz2’, ‘.zip’, or ‘xz’这些为后缀的文件,否则不解压。
Specifies which converter the C engine should use for floating-point values. The options are None for the ordinary converter, high for the high-precision converter, and round_trip for the round-trip converter.
控制csv中的引号常量。可选 QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3)
双引号,当单引号已经被定义,并且quoting 参数不是QUOTE_NONE的时候,使用双引号表示引号内的元素作为一个元素使用。
标识着多余的行不被解析。如果该字符出现在行首,这一行将被全部忽略。这个参数只能是一个字符,空行(就像skip_blank_lines=True)注释行被header和skiprows忽略一样。
例如如果指定comment= # 解析‘#empty/na,b,c/n1,2,3’ 以header=0 那么返回结果将是以’a,b,c 作为header。
Leave a list of tuples on columns as is (default is to convert to a Multi Index on the columns)
如果一行包含太多的列,那么默认不会返回DataFrame ,如果设置成false,那么会将改行剔除(只能在C解析器下使用)。
如果error_bad_lines =False,并且warn_bad_lines =True 那么所有的“bad lines”将会被输出(只能在C解析器下使用)。
分块加载到内存,再低内存消耗中解析。但是可能出现类型混淆。确保类型不被混淆需要设置为False。或者使用dtype 参数指定类型。
注意使用chunksize 或者iterator 参数分块读入会将整个文件读入到一个Dataframe,而忽略类型(只能在C解析器中有效)
如果设置compact_ints=True ,那么任何有整数类型构成的列将被按照最小的整数类型存储,是否有符号将取决于use_unsigned 参数
obj=pd.read_csv(f:/ceshi.csv) #获取对应的列值,从列名获取值,header必须从0开始或者默认 obj[列名] #header=None时,即指明原始文件数据没有列索引,这样read_csv为自动加上列索引,除非你给定列索引的名字。 obj_2=pd.read_csv(f:/ceshi.csv,header=None,names=range(2,5)) #header=0,表示文件第0行(即第一行,python,索引从0开始)为列索引,这样加names会替换原来的列索引。 obj_2=pd.read_csv(f:/ceshi.csv,index_col=0) #index_col为指定数据中哪一列作为Dataframe的行索引,也可以可指定多列,形成层次索引,默认为None,即不指定行索引,这样系统会自动加上行索引(0-) obj_2=pd.read_csv(f:/ceshi.csv,index_col=[0,2]) #usecols:可以指定原数据集中,所使用的列。在本例中,共有4列,当usecols=[0,1,2,3]时,即选中所有列,之后令第一列为行索引,当usecols=[1,2,3]时,即从第二列开始,之后令原始数据集的第二列为行索引。 obj_2=pd.read_csv(f:/ceshi.csv,index_col=0,usecols=[0,1,2,3]) #nrows:可以给出从原始数据集中的所读取的行数,目前只能从第一行开始到nrows行 obj_2=pd.read_csv(f:/ceshi.csv,index_col=0,nrows=3)
3、用pandas创建数据表:
df = pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006], "date":pd.date_range(20130102, periods=6), "city":[Beijing , SH, guangzhou , Shenzhen, shanghai, BEIJING ], "age":[23,44,54,32,34,32], "category":[100-A,100-B,110-A,110-C,210-A,130-F], "price":[1200,np.nan,2133,5433,np.nan,4432]}, columns =[id,date,city,category,age,price])二、数据表信息查看
1、维度查看:
df.shape
2、数据表基本信息(维度、列名称、数据格式、所占空间等):
df.info()
3、每一列数据的格式:
df.dtypes
4、某一列格式:
df[B].dtype
5、空值:
df.isnull()
6、查看某一列空值:
df[B].isnull()
7、查看某一列的唯一值:
df[B].unique()
8、查看数据表的值:
df.values
9、查看列名称:
df.columns
10、查看前10行数据、后10行数据:
df.head() #默认前10行数据 df.tail() #默认后10 行数据三、数据表清洗
1、用数字0填充空值:
df.fillna(value=0)
2、使用列prince的均值对NA进行填充:
df[prince].fillna(df[prince].mean())
3、清楚city字段的字符空格:
df[city]=df[city].map(str.strip)
4、大小写转换:
df[city]=df[city].str.lower()
5、更改数据格式:
df[price].astype(int)
6、更改列名称:
df.rename(columns={category: category-size})
7、删除后出现的重复值:
df[city].drop_duplicates()
8、删除先出现的重复值:
df[city].drop_duplicates(keep=last)
9、数据替换:
df[city].replace(sh, shanghai)四、数据预处理
df1=pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006,1007,1008], "gender":[male,female,male,female,male,female,male,female], "pay":[Y,N,Y,Y,N,Y,N,Y,], "m-point":[10,12,20,40,40,40,30,20]})
1、数据表合并
df_inner=pd.merge(df,df1,how=inner) # 匹配合并,交集 df_left=pd.merge(df,df1,how=left) # df_right=pd.merge(df,df1,how=right) df_outer=pd.merge(df,df1,how=outer) #并集
2、设置索引列
df_inner.set_index(id)
3、按照特定列的值排序:
df_inner.sort_values(by=[age])
4、按照索引列排序:
df_inner.sort_index()
5、如果prince列的值 3000,group列显示high,否则显示low:
df_inner[group] = np.where(df_inner[price] 3000,high,low)
6、对复合多个条件的数据进行分组标记
df_inner.loc[(df_inner[city] == beijing) (df_inner[price] = 4000), sign]=1
7、对category字段的值依次进行分列,并创建数据表,索引值为df_inner的索引列,列名称为category和size
pd.DataFrame((x.split(-) for x in df_inner[category]),index=df_inner.index,columns=[category,size]))
8、将完成分裂后的数据表和原df_inner数据表进行匹配
df_inner=pd.merge(df_inner,split,right_index=True, left_index=True)五、数据提取
主要用到的三个函数:loc,iloc和ix,loc函数按标签值进行提取,iloc按位置进行提取,ix可以同时按标签和位置进行提取。
1、按索引提取单行的数值
df_inner.loc[3]
2、按索引提取区域行数值
df_inner.iloc[0:5]
3、重设索引
df_inner.reset_index()
4、设置日期为索引
df_inner=df_inner.set_index(date)
5、提取4日之前的所有数据
df_inner[:2013-01-04]
6、使用iloc按位置区域提取数据
df_inner.iloc[:3,:2] #冒号前后的数字不再是索引的标签名称,而是数据所在的位置,从0开始,前三行,前两列。
7、适应iloc按位置单独提起数据
df_inner.iloc[[0,2,5],[4,5]] #提取第0、2、5行,4、5列
8、使用ix按索引标签和位置混合提取数据
df_inner.ix[:2013-01-03,:4] #2013-01-03号之前,前四列数据
9、判断city列的值是否为北京
df_inner[city].isin([beijing])
10、判断city列里是否包含beijing和shanghai,然后将符合条件的数据提取出来
df_inner.loc[df_inner[city].isin([beijing,shanghai])]
11、提取前三个字符,并生成数据表
pd.DataFrame(category.str[:3])六、数据筛选
使用与、或、非三个条件配合大于、小于、等于对数据进行筛选,并进行计数和求和。
1、使用“与”进行筛选
df_inner.loc[(df_inner[age] 25) (df_inner[city] == beijing), [id,city,age,category,gender]]
2、使用“或”进行筛选
df_inner.loc[(df_inner[age] 25) | (df_inner[city] == beijing), [id,city,age,category,gender]].sort([age])
3、使用“非”条件进行筛选
df_inner.loc[(df_inner[city] != beijing), [id,city,age,category,gender]].sort([id])
4、对筛选后的数据按city列进行计数
df_inner.loc[(df_inner[city] != beijing), [id,city,age,category,gender]].sort([id]).city.count()
5、使用query函数进行筛选
df_inner.query(city == ["beijing", "shanghai"])
6、对筛选后的结果按prince进行求和
df_inner.query(city == ["beijing", "shanghai"]).price.sum()
七、数据汇总 主要函数是groupby和pivote_table
1、对所有的列进行计数汇总
df_inner.groupby(city).count()
2、按城市对id字段进行计数
df_inner.groupby(city)[id].count()
3、对两个字段进行汇总计数
df_inner.groupby([city,size])[id].count()
4、对city字段进行汇总,并分别计算prince的合计和均值
df_inner.groupby(city)[price].agg([len,np.sum, np.mean])八、数据统计
数据采样,计算标准差,协方差和相关系数
1、简单的数据采样
df_inner.sample(n=3)
2、手动设置采样权重
weights = [0, 0, 0, 0, 0.5, 0.5] df_inner.sample(n=2, weights=weights)
3、采样后不放回
df_inner.sample(n=6, replace=False)
4、采样后放回
df_inner.sample(n=6, replace=True)
5、 数据表描述性统计
df_inner.describe().round(2).T #round函数设置显示小数位,T表示转置
6、计算列的标准差
df_inner[price].std()
7、计算两个字段间的协方差
df_inner[price].cov(df_inner[m-point])
8、数据表中所有字段间的协方差
df_inner.cov()
9、两个字段的相关性分析
df_inner[price].corr(df_inner[m-point]) #相关系数在-1到1之间,接近1为正相关,接近-1为负相关,0为不相关
10、数据表的相关性分析
df_inner.corr()九、数据输出
分析后的数据可以输出为xlsx格式和csv格式
1、写入Excel
df_inner.to_excel(excel_to_python.xlsx, sheet_name=bluewhale_cc)
2、写入到CSV
df_inner.to_csv(excel_to_python.csv)
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/16703.html
cgojavapython相关文章
- ROS中cv_bridge如何用python3进行编译
- Python3 多进程与多线程
- python3标准库httpclient使用
- Selenium4+Python3系列(十三) - 与docker中的jenkins持续集成
- Python3程序捕获Ctrl+C终止信号
- 使用Python3+ffmpeg对视频进行精确截取的探索
- python3 pandas 读取 Excel、CSV
- Centos7 下安装python3及卸载的教程
- python3-开发面试题(python)6.24基础篇(3)详解编程语言
- python3-开发面试题(python)6.22基础篇(1)详解编程语言
- Python3 hasattr()、getattr()、setattr()函数简介详解编程语言
- Python3.x:判断字符串是否为全数字、英文、大写、小写、空白字符详解编程语言
- Python3.x:pyodbc调用sybase的存储过程详解编程语言
- Python3.x:Selenium+PhantomJS爬取带Ajax、Js的网页详解编程语言
- Python3.x:代理ip刷点赞详解编程语言
- Python3 实现淘女郎照片爬虫
- 利用Pandas与MSSQL进行数据分析(pandas mssql)