Python Pandas数据处理基础,机器学习和深度学习必备基础,常用函数和数据处理方式

Pandas是多数数据处理的首选库,它能使数据清洗和分析工作变得高效快捷。pandas经常和其它工具一同使用,如数值计算工具NumPy 和SciPy,分析库statsmodels和scikit-learn,和数据可视化库matplotlib。pandas是基于NumPy数组构建的,特别是基于数组的函数和不使用for循环的数据处理。

导入Pandas模块:

一.应用DataFrame创建数据

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值 类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被 看做由Series组成的字典(共用同一个索引)。DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。

导入pandas模块和查看版本:

import pandas as pd

pd.__version__

结果:

 自己在数据分析的过程中,构建dataframe:

"""创建DataFrame数据:最常用的一种是直接传入一个由等长列表或NumPy数 组组成的字典"""
data = {'name':['zhangsan','lisi','wangwu','hanhan','huahua'],
        'gender':['男','男','男','女','男'],
        'yearsOld':['13','15','19','25','18']}
dataframe = pd.DataFrame(data)
#df.head()函数默认显示前5行
dataframe.head()

结果:

 如果指定了列序列,则DataFrame的列就会按照指定顺序进行排列:

#如果指定了列序列,则DataFrame的列就会按照指定顺序进行排列:
df_01 = pd.DataFrame(data,columns=['gender','name','yearsOld'])
df_01.head()

结果:

 指定列名称和行标题,指定显示前三列

#指定列名称和行标题,指定显示前三列
df_02 = pd.DataFrame(data,columns=['gender','name','yearsOld'],index=['one','two','three','four','five'])
df_02.head(3)

 结果:

 选取一列转化为列表,以下有3种思路:

#选取一列转化为列表,以下有3种思路
a = df_02.name.to_list()
b = df_02['name'].to_list()
c = [i[1] for i in df_02.values]
print('a',a)
print('b',b)
print('c',c)

结果:

dataframe添加新的一列,并赋值:

#dataframe添加新的一列。并赋值
df_02['weight'] = '100kg'
df_02.head(5)

结果:

二. dataframe数据选取

基本和numpy相同,但是要注意.iloc和loc、iat和at的区别,iloc中括号里面填写数字表示位置,如[0,0]表示第1行的第1列,loc中括号里面要填写具体的列名称和行名称,如['one','name']表示‘one’行和‘name’列,at同loc,iat同iloc:

#dataframe切片,选取‘weight’列
df_02['weight']

结果:

 选取第一行

df_02.iloc[0,:]

结果:

 选取第一行,第一个元素:

df_02.iloc[0,0]

结果:

 返回第⼀⾏,即“one”行(索引为默认的数字时,⽤法同df.iloc)

df_02.loc['one',:]

df_02.loc['one','name']

结果:

 选择索引排序为3,字段排序为0的数据:

df_02.iat[3,0]

结果:

 del删除一列:

#del删除一列
del df_02['yearsOld']
#查看列名称
df_02.columns

结果:

 三.dataframe外部导入数据

导入excel数据表,在当前文件夹下,相对路径即可,也可以是绝对路径

#导入excel数据表,在当前文件夹下,相对路径即可,也可以是绝对路径
df_11 = pd.read_excel('drug_use.xlsx')
df_11.head(2)

结果:

查看⾏数和列数:

df_11.shape

 

 查看DataFrame对象的最后n行:

df_11.tail(2) 

 查看数值型列的汇总统计,这个一般做计数统计,不适用与nlp处理

df_11.describe()

 查看是否有缺失值

df_11.isnull().any() 

 

 查看column_name字段数据重复的个数

df_11[df_11['entityId'].duplicated()] .count()

 导入其他格式的数据,CSV、txt、sql、json等格式数据方式:

#同理,从CSV⽂件导⼊数据,示例是导入该目录data文件下的该文件
df_12 = pd.read_csv('.data/niupi.csv')
#导入txt
df_13 = pd.read_csv('.data/niupi.txt',engine='python',encoding='utf-8')
# 从SQL表/库导⼊数据
df_15 = pd.read_sql(query,connection_object)
# 从JSON格式的字符串导⼊数据
df_16 = df.to_json(filename)

四.存储数据

导出数据到CSV⽂件

df.to_csv(filename) 

导出数据到Excel⽂件

df.to_excel(filename)

 导出数据到SQL表

df.to_sql(table_name,connection_object)

 以Json格式导出数据到⽂本⽂件

df.to_json(filename)

 五.数据处理和数据合并

df.drop_duplicates #去除重复数据

df.columns= ['a','b','c'] # 重命名列名(需要将所有列名列出,否则会报错)

pd.isnull() # 检查DataFrame对象中的空值,并返回⼀个Boolean数组

pd.notnull() # 检查DataFrame对象中的⾮空值,并返回⼀个Boolean数组

df.dropna() # 删除所有包含空值的⾏

df.dropna(axis=1) # 删除所有包含空值的列

df.dropna(axis=1,thresh=n) # 删除所有⼩于n个⾮空值的⾏

df.fillna(value=x) # ⽤x替换DataFrame对象中所有的空值,⽀持

df[column_name].fillna(x)

df.rename(columns=lambdax:x+1) # 批量更改列名

df.rename(columns={'old_name':'new_ name'}) # 选择性更改列名

df.set_index('column_one') # 将某个字段设为索引,可接受列表参数,即设置多个索引

df.reset_index("col1") # 将索引设置为col1字段,并将索引新设置为0,1,2...

df.rename(index=lambdax:x+1) # 批量重命名索引

df.sort_index().loc[:5] # 对前5条数据进⾏索引排序

df.sort_values(col1) # 按照列col1排序数据,默认升序排列

df.sort_values(col2,ascending=False) # 按照列col1降序排列数据

df.sort_values([col1,col2],ascending=[True,False]) # 先按列col1升序排列,后按col2降序排列数据

df.groupby(col) # 返回⼀个按列col进⾏分组的Groupby对象

df.groupby([col1,col2]) # 返回⼀个按多列进⾏分组的Groupby对象

df.groupby(col1)[col2].agg(mean) # 返回按列col1进⾏分组后,列col2的均值,agg可以接受列表参数,agg([len,np.mean])

df.pivot_table(index=col1,values=[col2,col3],aggfunc={col2:max,col3:[ma,min]}) # 创建⼀个按列col1进⾏分组,计算col2的最⼤值和col3的最⼤值、最⼩值的数据透视表

df.groupby(col1).agg(np.mean) # 返回按列col1分组的所有列的均值,⽀持

df.groupby(col1).col2.agg(['min','max'])

data.apply(np.mean) # 对DataFrame中的每⼀列应⽤函数np.mean

data.apply(np.max,axis=1) # 对DataFrame中的每⼀⾏应⽤函数np.max

df.groupby(col1).col2.transform("sum") # 通常与groupby连⽤,避免索引更改

df1.append(df2) # 将df2中的⾏添加到df1的尾部

df.concat([df1,df2],axis=1,join='inner') # 将df2中的列添加到df1的尾部,值为空的对应⾏与对应列都不要

df1.join(df2.set_index(col1),on=col1,how='inner') # 对df1的列和df2的列执⾏SQL形式的join,默认按照索引来进⾏合并,如果df1和df2有共同字段时,会报错,可通过设置lsuffix,rsuffix来进⾏解决,如果需要按照共同列进⾏合并,就要⽤到set_index(col1)

pd.merge(df1,df2,on='col1',how='outer') # 对df1和df2合并,按照col1,⽅式为outer

pd.merge(df1,df2,left_index=True,right_index=True,how='outer') #与 df1.join(df2, how='outer')效果相同

敲黑板:pandas是数据处理的基础,在机器学习和深度学习领域,其往往和numpy模块合并使用,常用的功能我们记住即可,其他功能我们我可边用边查。

常用功能:1.读取和保存excel,txt,csv文件;

2.创建dataframe,并利用索引选取数据,并转化为列表字典等相应格式;

3.去除重复数据、空值,group分组,merge、concat合并等;

应用示例:nlp常用功能,excel两列数据转化为字典,转化为“GROUP_CODE”为key,“GROUP_ICD_NAME”为value的字典:

import pandas as pd

df_01 = pd.read_excel('03-GX_GROUP_PACKAGE.xlsx')
df_01.head(2)

dic = {}
for i in df_01.values:
    try:
        dic[i[5]].append(i[3])
    except:
        dic[i[5]] = [i[3]]

查看一下结果:

dic

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

医学小达人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值