机器学习之Pandas 基础2

Pandas 基础知识2

1 pandas 分组计算

import pandas as pd
import numpy as np
df = pd.DataFrame({
    'key1':['a','a','b','b','a'],
    'key2':['one','two','one','two','one'],
    'data1':np.random.randint(1,10,5),
    'data2':np.random.randint(1,10,5)    
})

df['data1'].groupby(df['key1']).mean()# df二维数组的data1这一列根据key1分组并求平均值

# 依据多个列表分组
df['data1'].groupby([df['key1'],df['key2']]).sum()  # sum求和,.size()求个数

df.groupby('key1').sum()['data1']  # 直接对表进行分组,求和
mean = df.groupby(['key1','key2']).sum()['data1']

mean.unstack() # 将series转换为dataframe数组

# 支持for循环迭代
for name,group in df.groupby('key1'):
    print(name)
    print(group)
df.groupby(df.dtypes,axis = 1).sum()  # 根据列分组  横着分组

# 根据字典分组
df = pd.DataFrame(np.random.randint(1,10,(5,5)),
                 columns = list('abcde'),
                 index = ['alice','bob','candy','dark','emily'])
df.iloc[1,1:3] = np.nan

pandas 聚合函数

# pandas 内置聚合函数
# sum()/mean()/max()/min()/describe
# 自定义聚合函数  df.agg(自定义聚合函数名)  自定义函数不需要加''号
# df.agg([‘内置聚合函数1’,‘内置聚合函数2’,(对聚合函数作用后的列重新命名,聚合函数3)])

# 可以利用字典
# d = {'列1':'内置聚合函数1','内置聚合函数2',('聚合函数生成的列重新命名',自定义聚合函数)}
# df.agg(d)

pandas 文件读取

读文件

# 有列名称
# pd.read_csv('文件名')
# pd.read_table('文件名',sep = '分割符')

# 无列名称
# pd.read_csv('文件名',header = None,names = [列名称列表])
# pd.read_csv('文件名',header = None,names = [列名称列表],index_col = [行名称列表1,行名称列表2])
# 以上方法指定多重索引

# 分隔符不规则
# 正则表达式
# pd.read_table('文件名',sep = '正则表达式')  \s+

# 缺失值的处理
# pd.read_csv('文件名',na_values = [当成缺失值的列表]) #针对整个数组指定缺失值
# 针对每一列指定缺失值
# pd.readn_csv('文件名',na_values = {'列1':[缺失值列表],'列2':[缺失值列表]})

# 方块读取数据
# pd.read_csv('文件名',nrows = 行数)  # 读取数据中固定行数的内容
# tr = pd.read_csv('文件名',chunksize = 行数) 每次读取文件中固定的行数,放在tr变量中
# tr 可以迭代
# result = pd.Series([])  # 创建结果容器
# for chunk in tr:  # meiyige chunk 都是一个固定行数的dataframe 
# result = result.add(chunk['列名'].values_count(),fill_value = 0)

写文件

# df.to_csv('文件名',index = False)  # index = False 不写索引
# df.to_csv('文件名',index = False,header = None,columns = [列名],sep = 分隔符)
# header 不写列索引,columns 指定写入哪些列到磁盘

Pandas数据可视化

import pandas as pd
import numpy as np
#一维  折线图
ts = pd.Series(np.random.randn(1000),index = pd.date_range('20100101',periods = 1000))  # 创建对象
ts = ts.cumsum() # 求累加和
ts.plot(title = 'cumsum',style = 'r-',figsize = (8,6)); # 折线图
# 二维  折线图
df = pd.DataFrame(np.random.randn(1000,4),index = ts.index,columns = list('abcd'))
df = df.cumsum()
df.plot(subplots = True,figsize = (6,8),sharey = True); # subplots 将每个子图单独画出来 sharey 使坐标y一致

# 二维 柱状图
# 柱状图 plot(kind = 'bar') 或者plot.bar(h) 水平(垂直)
df.iloc[0].plot(kind = 'bar')
df.plot.bar(stacked = True)  #括号内可以指定参数stacked = True 接力画


# 直方图
df['a'].hist(bins = 20,alpha = 0.3,stacked = True) # 直方图  bins 柱子个数, alpha 指定透明度,stacked 指定接力形式
df.plot.hist(subplots = True,sharex = True,sharey = True,bins = 50);

# 概率密度
df['a'].plot.kde() # 概率密度
# 散布图
df.plot.scatter(x= 'a',y = 'b')  #  散布图
# 饼图
s.plot.pie()

pandas时间序列

# python datetime模块
# from datetime import datetime
# from datetime import timedelta

# python 时间
# now = datetime.now  现在的时间
# now.year,now.month,now.day #datetime year month day 属性

# date1 = datetime(2019,12,31)
# date2 = datetime(2020,6,30)  # datetime 创建时间
# deltatime = date1 - date2
# deltatime.days # 差的天数
# deltatime.total_seconds() # 差的秒数
# timedelta(4.5)+date1  #date1 + 4.5 天

# date1.strftime('%y/%m%d' %H:%M:%S) # 时间转换为字符串
# datetime.strptime('2019-02-20 9:30','%Y-%m-%d %H:%M') # 字符串转换成时间

# pandas时间序列
# dates = [datetime(2016,3,1),datetime(2016,4,1),datetime(2016,5,1)] #创建时间序列列表
# s = pd.Series(np.random.randn(4),index = dates) # 根据时间列表创建 
# 生成时间戳的时间序列的方法
# pd.date_range('开始时间','结束时间'/periods = 个数,normalize = True,freq = '时间频率' )
# normalize 正则化开关,去掉时分秒的时间  freq  Q 季度 M 月 d 天 w 星期 nH 几个小时 默认时间频
# p = pd.Period(2010,freq = 时间频率)

# 时期序列
# a = pd.period_range('开始时期''结束时期'/periods = 个数,freq = 'M') 
# 时期转换
# a.asfreq('M')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值