pandas库学习基础和经验(二)--重点推荐

1.pandas 中DataFrame使用:数据标准化、数据分组、日期转换、日期格式化、日期抽取

2.pandas 中DataFrame使用:记录抽取,随机抽样,记录合并,字段合并,字段匹配,数据的简单计算

3.pandas 中DataFrame使用:数据导入\出,重复值处理,缺失数据处理,字段抽取,字段拆分

4.pandas 中DataFrame的数据定义,访问,修改,删除,增加,遍历

5.pandas 中Series的:数据定义,访问,追加,切片,删除

#11.pandas将一列中的文本拆分成多行
df=df.drop('cont', axis=1).join(df['cont'].str.split('/', expand=True).stack().reset_index(level=1, drop=True).rename('tag'))
df=df['cont'].str.split('/', expand=True).stack().reset_index(level=0).set_index('level_0').rename(columns={0:'tag'}).join(df.drop('cont', axis=1))

#拆分list
road = r"C:\Users\lihwa11\Desktop\temp\tg.xlsx"
demo1 = pd.read_excel(road)
demo1
#拆分在后
demo2=demo1.drop("address", axis=1).join(demo1["address"].str.split(",", expand=True).stack().reset_index(level=1, drop=True).rename("address_name"))
demo2
#拆分在前
demo3=demo1["address"].str.split(",", expand=True).stack().reset_index(level=0).set_index('level_0').rename(columns={0:"address_name"}).join(demo1.drop("address", axis=1))
demo3



###########################实现sql中的count和count(distinct 字段)去重####################################################################
# -*- coding:utf-8 -*-
import pandas as pd
from datetime import datetime
def Main():
    print("开始。。。。。")
    print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    source_txt = "/sh/yanjie/fudan/bigdata/bigdata_click_result.txt"
    target_txt = "/sh/yanjie/fudan/bigdata/host_pvuv_click.txt"
    uname = ['ad','type','host','url','ref','time','os','os_type']
    # count(*)
    pv = pd.read_csv(source_txt,sep="\t",header=None,names=uname,index_col=False)[['host','ad']].groupby('host')['ad'].size()
    # count(distinct **)
    uv = pd.read_csv(source_txt,sep="\t",header=None,names=uname,index_col=False)[['host','ad']].groupby('host').agg({'ad': pd.Series.nunique})
    # 去除索引,带出分组的字段
    result = pd.merge(pv.reset_index(),uv.reset_index(),how='inner',on='host')
    result.to_csv(target_txt,header=None,index=False,sep="\t")
    print("完成。。。。。")
    print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
 
if __name__ == "__main__":
    Main()


#透视图表的应用

table = pd.pivot_table(df,index=["字段1","字段2"],columns=["字段3"],values=["字段4","字段5"], aggfunc={"字段4":len,"字段5":[np.sum,np.mean]},fill_value=0)
#只查看具体的情况
table.query('Status == ["pending","won"]')

## 参数
sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)
## 参数说明
##axis:0按照行名排序;1按照列名排序
##level:默认None,否则按照给定的level顺序排列---貌似并不是,文档
##ascending:默认True升序排列;False降序排列
##inplace:默认False,否则排序之后的数据直接替换原来的数据框
##kind:默认quicksort,排序的方法
##na_position:缺失值默认排在最后{"first","last"}
##by:按照那一列数据进行排序,但是by参数貌似不建议使用
df = pd.DataFrame(input_data, columns=df_col)
# sort_index 按照列(时间)降序排列
pivot_data = df.pivot_table(index=df_index, columns=['create_dt'], values=df_value, fill_value=0).sort_index(axis=1, ascending=False)

############透视表中的操作#####################
#1.按照字段1,字段2位行进行分组,按照字段4进行列分组,按照字段3进行运算,用aggfunc进行计算,二fill_value就是把那些非数值的进行
pd.pivot_table(df,index=["字段1","字段2"],values=["字段3"],columns=["字段4"],aggfunc=[np.sum],fill_value=0)
#2、删除缺失值dropna
table.dropna(axit=0,subset=['字段1','字段2'])
#3、定位loc
table.loc[3,'字段1']#,表示(第三行,Cost)的值,
table.loc[0,10]#第1行第10列
#4、按字段排序sort_values
table.sort_values('Cost',ascending='False') #ascending的T/F选择顺序还是逆序
#5、自定义函数apply
#操作:table.apply(sum_min,axis=1),也就是通过sum_min函数对table进行操作,还可以通过axis选择某一维度进行计算

def sum_min(column):
	#功能函数
    return summin_item
table.apply(sum_min,axis=1)

#6.交叉表的应用
pd.crosstab(df['类别'],df['产地'],margins=True) # 按类别分组,统计各个分组中产地的频数
#7.提供分项函数
df.pivot_table('价格',index='产地',columns='类别',aggfunc=["max","min","mean"],margins=True,fill_value=0)
#排序只根据第一个排列
de = ["统计日期","店铺"]
delay_group = test.groupby(["店铺"])
delay_group.head()


########
#合并完之后copy一份
from pandas import to_datetime
from datetime import datetime
#temp_demo = temp.copy()
temp_demo["年"] = temp_demo["month"].apply(lambda x : x[:4])
temp_demo["月"] = temp_demo["month"].apply(lambda x : x[5:6])
#temp_demo["统计日期"] = temp_demo["年"].str.cat(temp_demo["月"],sep = '-')
#对日期进行修改,必须是日期格式
temp_demo["统计日期"] = pd.to_datetime(temp_demo["年"].str.cat(temp_demo["月"],sep = '-'),format = "%Y-%m")
temp_demo["统计日期"]=temp_demo["统计日期"].apply(lambda x: datetime.strftime(x,"%Y-%m"))

#####分组排序功能
#导包
import pandas;
read_all = r"C:\Users\lihwa11\Desktop\temp\pandas_data\data14.csv"
df=pd.read_csv(read_all,sep="|")
bins=[min(df.cost)-1,20,40,60,80,100,max(df.cost)+1]
labels=['20以下','20到40','40到60','60到80','80到100','100以上']
result=pandas.cut(df.cost,bins=bins,right=False,labels=labels)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值