panda/numpy数据分析1

1.pands基础使用

1.1导入/展示

import numpy as np
import pandas as pd
pd.set_option('display.max_columns', None)#使pandas可以展示所有的列
pd.set_option('display.max_rows', None)#展示所有行
pd.set_option('max_colwidth',100)#默认表格里面的值超过50个字符则不显示 在这里改到100

出现IOPub data rate exceeded
cmd中输入:jupyter notebook --generate-config 在那个文件里找到iopub_data_rate_limit那一行改大就行 10000000000000000000

1.2 对象创建

1)Series

In [3]: s = pd.Series([1, 3, 5, np.nan, 6, 8])
In [4]: s
Out[4]: 
0    1.0
1    3.0
2    5.0
3    NaN
4    6.0
5    8.0
dtype: float64

2)DataFrame

dates = pd.date_range('20130101', periods=6)#生成时间序列 6天  注意是daterange
Out[6]: 
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
               '2013-01-05', '2013-01-06'],
              dtype='datetime64[ns]', freq='D')
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
#index 索引 是最左侧的索引 不写 默认0-n columns是列名 
Out[8]: 

                   A         B         C         D
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804
2013-01-04  0.721555 -0.706771 -1.039575  0.271860
2013-01-05 -0.424972  0.567020  0.276232 -1.087401
2013-01-06 -0.673690  0.113648 -1.478427  0.524988

3)Series转DataFrame

series= series.reset_index()  #注意要赋值给自己 否则不起作用

1.3读入/写出csv

读入csv的时候会默认将第一行认为是头标签,如果不希望的话可以加入参数:header=None
这样pandas就会单独加上一列数据[0,1,2,3…]为列标签

data2 = pd.read_csv('./D/prod_info.csv',encoding='GBK') #读入变成dataframes  encoding看情况
object.to_csv("csv名称.csv")# 写出csv

1.4 列名/列/删除

第一个表s列等于第二个表s列 注意列要提前存在 否则报错

tset["s"]=""#空列
tset["s"]=temp["s"]

2.pandas dataframes对象处理

下文df就指的是一个有数据的dataframes对象

2.1取值

索引选取

df[0:10] #取前10行数据
df[:-10]#一直取到-10行
df["total_cost"][0]#取total_cost这一列的第一个元素
df["total_cost"][0][1]#取total_cost这一列的第一个元素的第一个位置的元素(可迭代才能这么做)

条件选取

setdata=setdata[setdata["date_rcd"].isin([True])]  #选取setdata表里面date_rcd列名中 有布尔值为true的行 
datac=datac[~datac['tinyset'].isin([""])] #去除datac表中tinyset列的空值

查看所有列类型

df.dtypes

2.2 排序

df. sort_values()
调用方式
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’)

默认按照列排序,即纵向排序;如果axis 为1,则是横向排序。
by:str or list of str;如果axis=0,那么by=“列名”;如果axis=1,那么by=“行名”。
ascending:布尔型,True则升序,如果by=[‘列名1’,‘列名2’],则该参数可以是[True, False],即第一字段升序,第二个降序。
inplace:布尔型,是否用排序后的数据框替换现有的数据框。
kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。似乎不用太关心。
na_position:{‘first’, ‘last’}, default ‘last’,默认缺失值排在最后面。

data2=data2.sort_values(by=["skc"],axis=0,ascending=True)#以skc这一列来排序 升序
data1=data1.sort_values(by=["skc","date_rcd"],axis=0,ascending=[True,False])#按照skc 升序,datercd降序来排序
Out:
90   100572118085  2018-01-05  3     497.50
89   100572118085  2018-01-03  1     173.75
88   100572118085  2018-01-01  1     143.75
166  100572118151  2019-05-19  1      28.75
165  100572118151  2018-12-08  1      28.75
164  100572118151  2018-02-16  1      88.75

2.3 groupby

分组举例:
1.datac[“real_cost”].groupby([datac[“tinyset”],datac[“date_rcd”]],as_index=True).sum()
分组同样的tinyset下 同样的 date_rcd的里面的real_cost 进行sum求和
as_index =true的不同之处:

???/?? price
books
bk1 36
bk2 30
bk3 17

books price
0 bk1 36
1 bk2 30
2 bk3 17

2.datacost = data1[“real_cost”].groupby([data1[“skc”],data1[“date_rcd”].apply(lambda y:(y.year,y.month))]).sum()
apply函数会对遇到的值运行指定的函数,data1[“date_rcd”].apply(lambda y:(y.year,y.month))] 就是把遇到的y值都转换为(y.year,y.month)的元组

分组同样的skc下 同样的 date_rcd的里面单独对象的year和month相等的情况下对同行的real_cost 进行sum求和

groupby sum之后的对象是series 需要转换成dataframe
sum mean count 都有

groupby().filter()还可以继续增加条件 ,filter接收的参数是 满足group条件的行对象

2)时间转换
将2019-04-02这样的转换成时间
只要换下面%Y %m中间的符号就可以适应其他格式

data1["date_rcd"] = pd.to_datetime(data1["date_rcd"],format ="%Y-%m-%d") 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值