【Pandas超实用经验汇总-数据建模分析】


前言

看见了很多教程虽然很全,但是很多技巧容易忘记且几乎用不上,读起来晦涩难懂,今天我给大家总结了Pandas的一些学习经验技巧,包含常见日常使用的pandas知识,以及一些技巧,这些技巧常见于数学建模,数据分析,数据挖掘比赛等。


基本方法

1.读取文件

方法如下:

import pandas as pd

#正常写法,简单粗暴

#csv:
df = pd.read_csv("./1.csv")
#excel
df = pd.read_excel("1.xlsx")

#读txt或者csv,默认读取时为tab分隔数据
pd= pd.read_csv("1.txt", sep="\t")  # 设定sep="\s*,\s*"可以去除csv空格

#根据表头个数,可以这样读
#无表头,即第一行即数据而非标题,有1/2/3表头时header=0,1,2,dtype可以使x列为str
df = pd.read_excel("1.xlsx",header=None,dtype={"x列": str})

2.查看数据

查看数据的基本操作和技巧

#读表头
print(df.head())

#读列名
print(df.columns)

#读取最后几行
df.tail(5)

#读取某列
print(df["名称"])

#查行
#第0行数据,返回series,需要dataframe则传入列表[0]
df.iloc[0]  
df.iloc[[0]]
#第01行数据
df.iloc[[0, 1]]
df.iloc[:3]

#查看价格大于200的数据,可以作为筛选
print(df.loc[books['价格'].apply(lambda x: x > 200)])

#查找价格介于100-200的数据
print(df.loc[df['价格'].apply(lambda x:x<200).apply(lambda x:x>100)])

#利用plt绘制柱状图图片的快捷方法
import matplotlib.pylab as plt
df.sort_value(by='money',inplace=True)
df.plot.bar(x='index',y='money')
#设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

#创建数据透视表,其中index必选,为透视表的行,其他可选,column为透视表的列
#value为单独分析的列,aggfunc为values的计算方式,不指定默认使用np.mean,fill_value填充空值
pd = pd.pivot_table(index=["name",'s'], columns="year",  values="薪资",aggfunc=np.sum,fill_value=0)
print(pd)

#求和,同理,求均值替换sum为mean,axis=0按行求和
df[["1","2","3"]].sum(axis=1)



#02行数据,据此可以打开思路使用一定的判定条件改表
df.iloc[[True, False, True]]

#转置表,简单直接,比excel还方便
import pandas as pd
df= pd.read_excel("./student.xlsx",sheet_name="Sheet2",index_col="name")
df = df.transpose()

#按照特定的一个或者多个键分组输出
print(df.groupby(['key1','key2'])

#按照格式不同分组输出
df.groupby(df.dtypes, axis=1)

#先分组,再将新列中每列最小值去除成为对应列的新值
print(groupby(['name']).agg('min'))

#选择多列,输出同一列的多个统计数据
df.groupby('A').agg({'B': ['min', 'max'], 'C': min})

3.修改、删除、替换数据等



#批量修改某一列的值
#第一种方式,以对时间操作为例
import pandas as pd
from datetime import date, timedelta
df= pd.read_excel('1,xlsx', index_col="id")
for i in df.index:
    df["日期"].at[i] = (date.today() + timedelta(days=i))
    
#第二种方式,这里设置下班,可以自由发挥
df.iloc[lambda x: x.index == 'mickle']=1

#使值为真的对应数据值为1
df.iloc[[True,True,False,False]]=1

#第三种方式,还有第四种,但是完全被这三种方式替代,不必要掌握
df.loc[,'名称1']=1
df['a':'z',['name']]=1

#两列相乘,赋值到新列
df["2"] = df["1"] * df["3"]   

#修改名称列中的第二个值
df.at[1, "名称"] = "x"

#运用匿名表达式计算列
import pandas as pd
df= pd.read_excel(file, index_col="id")
df["价格"] = df["价格"].apply(lambda x: x + 2)   

#读取名称列的第一个值
r = df["名称"].at[0]

#排序,这里不需要赋值,因为替换了内存(inplace为真),ascending为逆序,正序为从小到大
df.sort_values(by="价格", inplace=True, ascending=False)

#根据列排列,如果by只有一列,则只需要by='x'即可
df.sort_values(by=["x", "y"], inplace=True, ascending=[False, True])  # 排序

#合并两个表table1和table2:merge函数,也可以用df.join函数,方法十分类似
#内连接,这是求交集合并,两表数据匹配即合并
table_merge=table1.merge(table2, how="inner", on="id"  )

#左连接,id 列为条件 , 左连接
table_merge= table1.merge(table2, how="left", on="id") 

#table1的id字段和, table2的"id2"字段做为查询条件合并
table1.merge(table2, how="left", left_on="id",right_on="id2")

 # 合并行,重新设置index
table3 = table1.append(table2).reset_index(drop=True)

# 拆分name列
r = books['name'].str.split(expand=True) 

#去重,duplicates含重复之意,据此可以推出df['name'].duplicates可以查重
df.drop_duplicates(subset=["name"], inplace=True) 

#删改数据
df=df[df['is_sb']==True]

#插入一行数据, 追加新行
stu = pd.Series({"id":1, "name":"nica"})
df=df.append(stu, ignore_index=True )
remove_index = df.loc[df["1"]<60].index

#删除数据
pd.drop(index=df[(df['name']==['mikcle'] )& (df['is_sb']==False]).index, inplace=True) 

#删除空值,参数均为可选,any为有空值就删,换为all全为空值才删,subset指定查找的列
pd.dropna(how='any',axis=0,inplace=True,subset=['name','is_sb'])

#填充空值
pd.fillna(value=0)
pd.fillna(values={"A":'1',"is_sb":True})

#插入到某一列特定位置
df.insert(1, column="name", value='mikcle') 

#改列名,改index类推
df.rename(columns={"name":"mickle","yes_sb":"is_sb"}, inplace=True)

总结

想十分掌握pandas库的使用,就应该对pandas所操纵的数据类型有所掌握,这样才能再根本上掌握技巧。
虽然技巧很多,但是最主要的是练习,多加练习,才能生巧。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

源城编程哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值