dataframe数据处理用到的一些知识点


最近爬取数据整体是表格形式的,但后台数据是单条单条的,这里将结果利用list转dataframe的方式存在csv文件中,记录一下用到的数据分析的知识点

list转dataframe格式

import pandas as pd
df = pd.Dataframe(....)

示例:

a = [['自主访问', '1,193', '981', '554', '14.49%', '趋势'],
     ['购物车', '1,731', '1466', '846', '28.36%', '趋势'],
     ['我的淘宝', '950', '777', '634', '9.46%', '趋势'],
     ['直接访问', '0', '253', '37', '0.00%', '趋势']]

# list转成Dataframe格式
df = pd.DataFrame(a)
""" 0 1 2 3 4 5 0 自主访问 1,193 981 554 14.49% 趋势 1 购物车 1,731 1466 846 28.36% 趋势 2 我的淘宝 950 777 634 9.46% 趋势 3 直接访问 0 253 37 0.00% 趋势 """

dataframe部分操作

# 删除dataframe指定列
df = df.drop(columns=[5])

# 将某列设为索引列
df.set_index([0], inplace=True)

# 指定columns
df.columns = ['流量来源','本店交易指数', '竞店1交易指数', '竞店2交易指数', '本店支付金额']

# 新增列
df['data_time'] = ['2019/5/1', '2019/5/2'] * 5
df['kinds'] = ['客群指数'] * df.shape[0]

# 指定索引列 列名
df.index.name='流量来源'

更改数据类型
df[['本店交易指数','竞店1交易指数','竞店2交易指数']] = df[['本店交易指数','竞店1交易指数','竞店2交易指数']].astype('int')
df

dataframe应用函数到某列或几列,df.apply()

# 函数作用到某列 apply
df[1] = df[1].apply(lambda x: int(x.replace(',','')))

# 函数作用到多列 applymap
df[[1,2,3]] = df[[1, 2,3]].applymap(lambda x: int(x.replace(',','')))

dataframe合并

# 纵向合并, concat
total_df = pd.concat([df, df2],ignore_index=True )

# keys表示对纵向各分组进行命名
s_new = pd.concat([s1, s2, s3], keys=['本店交易指数','竞店1交易指数','竞店2交易指数'])
s_new

# 横向合并dataframe,how,默认内连接,此处为外连接,on为连接列,suffixes为连接属性后下标
new_merge = pd.merge(df, df_2, on=['流量来源', 'data_time'], suffixes=('_流量指数','_客群指数'), how='outer')

dataframe透视表

第一个参数表示作用列,index指代透视表行,columns指代透视表列

# 借助透视表进行数据重排,需要保证数据类型能够实现聚合函数,aggfun,默认取平均数
s = total_df.pivot_table(['本店交易指数','竞店1交易指数','竞店2交易指数'],index=['data_time','流量来源'], columns='kinds')

s2 = total_df.pivot_table(['本店交易指数','竞店1交易指数','竞店2交易指数'],index=['data_time','流量来源'], columns='kinds',aggfunc=sum)

dataframe在csv文件读取

# 读取含中文的文件名时,加上 engine='python',内容含中文时,加上 encoding='utf_8_sig'
data = pd.read_csv('data_阿道夫梦卓专卖店_徽歌旗舰店.csv',engine='python', encoding='utf_8_sig')

更多精彩内容