zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python3 pandas用法大全详解编程语言

Python3pandas编程语言 详解 用法 大全
2023-06-13 09:11:43 时间
一、生成数据表 

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