Pandas数据预处理的常用函数(以下关于pandas数据预处理说法正确的是)

网友投稿 520 2022-08-28


Pandas数据预处理的常用函数(以下关于pandas数据预处理说法正确的是)

引入Pandas,用于有关数据处理和分析的环节。

一、读取数据文件

1 .读取excel数据文件

1.1加载Excel表,使用skiprows=1跳过首行【对于一个excel文件,首行一般为字段的定义(标题行),第二行才为数据】

并指定加载的列,注意数据文件的编码,默认utf-8,常用还有gb2312,根据自身数据而定。

%%timeitraw_pd = pd.read_excel(data_file,,skiprows=1,usecols=[1,2,4],name=['item_id','item_name','price'],encoding='gb2312')181 ms ± 1.32 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)这里可以为每个执行单元之前加入%%timeit,观察其耗时情况。

1.2加载Excel表,使用header=0跳过有列标题的首行

除了使用skiprows=1可跳过首行,header=0也可以实现同样效果【对比1.1】

raw_pd = pd.read_excel(data_file,header=0,usecols=[1,2,4],name=['item_id','item_name','price'],encoding='gb2312')

1.3加载Excel表,首行为数据,不是列标题

若该表第一行不是列标题行而是数据行,则需要指定header=None,否则读取后,第一行数据会被作为column name

raw_pd=pd.read_excel(data_file,usecols=[1,2,4],name=['item_id','item_name','price'],header=None,encoding='utf-8')

1.4加载Excel表,读取前n行数据

若数据文件大小为几个G,显然若直接全量读取,内存会挤爆,因此可以先读取前n行看看。使用nrows=500,表示只读取前500行。

raw_pd=pd.read_excel(data_file,usecols=[1,2,4],name=['item_id','item_name','price'],header=None, nrows=500,encoding='utf-8')

1.5加载Excel表,跳过所有空白行

若有些表出现了不定数量的空白行,可以使用skip_blank_lines=True处理

raw_pd=pd.read_excel(data_file,usecols=[1,2,4],name=['item_id','item_name','price'],header=None,skip_blank_lines = True, nrows=500,encoding='utf-8')

1.6加载Excel表,通过自定规则,跳过满足规则的行

例如跳过有值为单数的行,定义更复杂的函数,用于跳过满足复杂规则的行。不过,除非这些行很多,否则可以在读取后,直接用正则drop掉来得更有效

pd.read_csv(data_file, skiprows=lambda x: x % 2 != 0)

二、读取CSV文件

2.1读取csv文件跟读取Excel文件区别不大,这里简单给出示例

raw_pd=pd.read_csv(data_file,usecols=[1,2,4],name=['item_id','item_name','price'],header=None,nrows=500,encoding='gb2312')

2.2读取数据时,跳过尾行

raw_pd=pd.read_csv(data_file,usecols=[1,2,4],name=['item_id','item_name','price'],header=None, skipfooter=5,encoding='gb2312')

2.3读取特定分割符的数据文件

read_csv也可以读取任意文本文件,只需要指定列分割符。

raw_pd=pd.read_csv('data_file.txt',sep='||',encoding='utf-8')

三、使用c或者python作为读取文件的引擎

pd.read_*** 方法默认使用python解释器作为读取文件engine,若数据文件大,可选择c engine

engine : {'c', 'python'}Parser engine to use. The C engine is faster while the Python engine is currently more feature-complete.

四、使用迭代器读取超大文件

参考官网文档给出的示例,使用​​iterator=True​​, 或者chunksize=4读取超大文件,返回的是TextFileReader,是一个文件迭代器

4.1.chunksize方式:

In [187]: reader = pd.read_csv('tmp.sv', sep='|', chunksize=4)In [188]: type(reader)Out[188]: In [189]: for chunk in reader: .....: print(chunk)

4.2.iterator=True方式:

使用iterator=True方式,值读取前面5行,放回的也是df对象

In [190]: reader = pd.read_csv('tmp.sv', sep='|', iterator=True)In [191]: chunk_pd=reader.get_chunk(5)chunk_pd.head()

4.3.当然最佳的方式是两者结合使用:返回迭代器方式,并指定分块读取,例如分64k读取

iter_df=pd.read_csv(large_file,iterator=True,chunksize=64*1024)

五、查看数据的基本信息

raw_pd:表示从文件读出来的数据

raw_pd.head(5) # 查看数据基本信息(前5行)raw_pd.tail(5) # 查看末尾5行raw_pd.sample(5) # 随机抽取5行查看raw_pd.dtypes # 查看每列数据类型raw_pd.columns #查看列名raw_pd.info() #查看各字段的信息raw_pd.shape #查看数据集行列分布,几行几列raw_pd.describe() # 快速查看数据的基本统计信息

六、有关空值处理

空值:在pandas中的空值是""缺失值:在dataframe中为NaN或者NaT(缺失时间),在series中为none或者nan

# 测试数据raw_pd = pd.DataFrame({"name": ['aoo', 'boo', 'coo'], "college": [np.nan, 'SACT', 'AACT'], "birth_date": [pd.NaT, pd.Timestamp("2000-10-01"),pd.NaT]})

6.1行的空值处理

"""axis:0或者'index'代表行操作(默认) 1或者'column':列操作how:any-只要有空值就删除(默认),all-全部为空值才删除inplace:False-返回新的数据集(默认),True-在愿数据集上操作"""# 使用频率高:查看name列中,有多少行为空值行,value_counts其实是一个统计方法raw_pd['name'].isnull().value_counts()# 使用频率高:any表示行的任意一列有空值,则删除该行;all表示该行全部为空,则删除raw_pd.dropna(axis=0, how='any', inplace=True)# 行的任意一列有空值,且出现2个空值才删除这些行。例如该行有3列,其中2列都是为空,那么可以删掉该行。使用频率低:raw_pd.dropna(axis=0, how='any',thresh=2, inplace=True)

6.2列的空值处理

# 使用频率高:指定某几列,若这些列中出现了空值,则直接删除所在行raw_pd.dropna(subset=['name', 'birth_date'],inplace=True)

6.3空值的填充

最简单的用法,对全部数据记录里面的空值填充指定值

df.fillna(value=‘bar’)

频繁使用:对指定列的空值进行填充

raw_pd['name']=raw_pd['name'].fillna(value='bar')

七、dataframe 取(定位)数据的操作

7.1按给定列名取数,类似字典操作:df[‘列名’]

raw_pd= raw_pd['name']

取出多列数据,入参为包含多个字段的list:[‘name’,‘college’]

raw_pd[['name','college']]

7.2按行默认的行索引号选取数据:df.loc

df = pd.DataFrame({"name": ['aoo', 'boo', 'coo'], "college": [np.nan, 'SACT', 'AACT'], "birth_date": [pd.NaT, pd.Timestamp("2000-10-01"),pd.NaT]})# 查看该df的行索引df.indexRangeIndex(start=0, stop=3, step=1)# 打印 birth_date college name0 NaT NaN aoo1 2000-10-01 SACT boo2 NaT AACT coo # 这里的0,1,2就是pandas默认给加载的数据提供的行索引号

去期待陌生,去拥抱惊喜。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java调用dll文件的实现解析
下一篇:Python中的PIL包详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~