pandas基本使用

pandas基础教程

一维数组的创建Series()

Series(data=None, #数组对象
        index=None,#设置索引名称(list,dict)
        dtype=None, #设置类型
        name=None, #设置对象名称
        copy=False, 
        fastpath=False
)
import pandas as pd

se = pd.Series([1,2,3],index=['name','age','sex'],name='12')
se
name    1
age     2
sex     3
Name: 12, dtype: int64
DataFrame(data=None,
          index=None,
          columns=None,
          dtype=None,
          copy=False
         )
import pandas as pd

arr = [['晓晓','潇潇','潇潇','潇潇','潇潇','潇潇'],[1,2,2,2,8,18]]
data = pd.DataFrame(arr,index=['name','sex'],columns= [2,2,2,2,2,2])
print(data)

dic = {
    'name':['小夏','西瓜君','水果'],
    'sex':[2,2,2]
}
pds = pd.DataFrame(dic)
pds
       2   2   2   2   2   2
name  晓晓  潇潇  潇潇  潇潇  潇潇  潇潇
sex    1   2   2   2   8  18
namesex
0小夏2
1西瓜君2
2水果2

文件读取

#读取表格
pandas.read_table(
    filepath_or_buffer, #文件名
    sep=’\t’, #以什么分割
    header=’infer’,#接收int或sequence。表示将某行数据作为列名。默认为infer,表示自动识别
    names=None,#array。表示列名。默认为None
    index_col=None,#接收int、sequence或False。表示索引列的位置默认为None。
    dtype=None, #接收dict。代表写入的数据类型(列名为key,数据格式为values)。默认为None
    engine=None,#接收c或者python。代表数据解析引擎。默认为c
    nrows=None #接收int。表示读取前n行。默认为None,读取全部
)

#读取CSV文件
pandas.read_csv(
            filepath_or_buffer,
            sep=’\t’,
            header=’infer’, 
            names=None,
            index_col=None,
            dtype=None,
            engine=None, 
            nrows=None
)

#读取excel文件
pandas.read_excel(
                io,#文件名
                sheetname=1,#接收string、int。代表excel表内数据的分表位置。默认为0
                header=0,      #接收int或sequence。表示将某行数据作为列名。默认为infer,表示自动识别。
                index_col=None,#接收int、sequence或者False。表示索引列的位置,取值为sequence则代表多重索引。默认为None。
                names=None,  #接收int、sequence或者False。表示索引列的位置,取值为sequence则代表多重索引。默认为None。
                dtype=None #接收dict。代表写入的数据类型(列名为key,数据格式为values)。默认为None
                nrows=None# 接收int。表示读取前n行。默认为None,读取全部
)
  File "<ipython-input-42-edd0a824dcf8>", line 4
    sep=’\t’, #以什么分割
        ^
SyntaxError: invalid character in identifier
import pandas as pd

data = pd.read_excel('E:\meal_order_detail.xlsx', nrows=5)
print(data['dishes_name'])

dvs1 = pd.read_csv('./order-14.3.csv',nrows=5,encoding='gbk')



print(dvs1['成交时间'])
0                 蒜蓉生蚝
1    蒙古烤羊腿\r\n\r\n\r\n
2                 大蒜苋菜
3                芝麻烤紫菜
4                  蒜香包
Name: dishes_name, dtype: object
0    2017/1/3 9:56
1    2017/1/3 9:56
2    2017/1/3 9:56
3    2017/1/3 9:56
4    2017/1/3 9:56
Name: 成交时间, dtype: object

DataPrame基础属性

import pandas as pd

dvs1 = pd.read_csv('./order-14.3.csv',nrows=5,encoding='gbk')

# DataFrame.index  #该指数(DataFrame行标签)。
index_data = dvs1.index
print('index_data方法%s'%index_data)

# DataFrame.columns #DataFrame的列标签
columns_data = dvs1.columns
print('columns_data方法:%s'%(columns_data))

# DataFrame.dtypes #返回dtypes DataFrame。
dtypes_data = dvs1.dtypes
print('dtypes_data方法:%s'%(dtypes_data))

# DataFrame.values #返回一个DataFrame的Numpy表示。
values_data = dvs1.values
print('values_data方法:%s'%(values_data))

# DataFrame.ndim   #返回一个int代表轴/阵列尺寸的数量。
ndim_data = dvs1.ndim
print('ndim_data方法:%s'%(ndim_data))

# DataFrame.shape  #返回一个元组代表DataFrame的维度。
shape_data = dvs1.shape
print('shape_data方法:',(shape_data))

# DataFrame.memory_usage  #(自我、索引、深)	返回每个列字节的内存使用。
memory_usage_data = dvs1.memory_usage
print('empty_data方法:%s'%(memory_usage_data))

# DataFrame.empty    #指标是否DataFrame是空的。
empty_data = dvs1.empty
print('empty_data方法:%s'%(empty_data))

# DataFrame.size   #返回一个int代表该对象的元素数量。
size_data = dvs1.size
print('size_data方法:%s'%(size_data))

# DataFrame.axes   #返回一个列表代表DataFrame的轴。
axes_data = dvs1.axes
print('axes_data方法:%s'%(axes_data))
index_data方法RangeIndex(start=0, stop=5, step=1)
columns_data方法:Index(['商品ID', '类别ID', '门店编号', '单价', '销量', '成交时间', '订单ID'], dtype='object')
dtypes_data方法:商品ID      int64
类别ID      int64
门店编号     object
单价      float64
销量      float64
成交时间     object
订单ID     object
dtype: object
values_data方法:[[30006206 915000003 'CDNL' 25.23 0.32799999999999996 '2017/1/3 9:56'
  '20170103CDLG000210052759']
 [30163281 914010000 'CDNL' 2.0 2.0 '2017/1/3 9:56'
  '20170103CDLG000210052759']
 [30200518 922000000 'CDNL' 19.62 0.23 '2017/1/3 9:56'
  '20170103CDLG000210052759']
 [29989105 922000000 'CDNL' 2.8 2.044 '2017/1/3 9:56'
  '20170103CDLG000210052759']
 [30179558 915000100 'CDNL' 47.41 0.226 '2017/1/3 9:56'
  '20170103CDLG000210052759']]
ndim_data方法:2
shape_data方法: (5, 7)
empty_data方法:<bound method DataFrame.memory_usage of        商品ID       类别ID  门店编号     单价     销量           成交时间  \
0  30006206  915000003  CDNL  25.23  0.328  2017/1/3 9:56   
1  30163281  914010000  CDNL   2.00  2.000  2017/1/3 9:56   
2  30200518  922000000  CDNL  19.62  0.230  2017/1/3 9:56   
3  29989105  922000000  CDNL   2.80  2.044  2017/1/3 9:56   
4  30179558  915000100  CDNL  47.41  0.226  2017/1/3 9:56   

                       订单ID  
0  20170103CDLG000210052759  
1  20170103CDLG000210052759  
2  20170103CDLG000210052759  
3  20170103CDLG000210052759  
4  20170103CDLG000210052759  >
empty_data方法:False
size_data方法:35
axes_data方法:[RangeIndex(start=0, stop=5, step=1), Index(['商品ID', '类别ID', '门店编号', '单价', '销量', '成交时间', '订单ID'], dtype='object')]

索引、迭代

import pandas as pd

dvs = pd.read_csv('./order-14.3.csv',nrows=5,encoding='gbk')

# DataFrame.head()	返回前5行。
print(dvs.head())

# DataFrame.at	获取一个值,[行/列]比loc跟快的速度
print(dvs.at[1,'类别ID'])

# DataFrame.iat	获取一个值为一对行/列整数位置。
print(dvs.iat[1,4])

# DataFrame.loc	访问一组行和列的标签(s)或一个布尔值数组。
print('修改以前的值',dvs.loc[:6,'单价'])
dvs.loc[:2,'单价']= 26.00
print('修改以后的值',dvs.loc[:6,'单价'])
print(dvs.loc[dvs["单价"]>10,['商品ID','单价']])


# DataFrame.iloc	纯粹基于integer-location索引选择的位置。
print('iloc',dvs.iloc[1])


# DataFrame.insert(loc,列值[…])	在指定位置插入列DataFrame。
# column=['商品ID', '类别ID', '门店编号', '单价', '销量','成交时间','订单ID']
# value=['30163281','914010000','CDNL','26','2','2017/1/3 9:56', '20170103CDLG000210052759']
# dvs.insert(2,column=column,value=value)

# DataFrame.items(自我)	迭代器/(列名,系列)对。
itme = dvs.items()
print(next(itme))

# DataFrame.keys(自我)	获得“信息轴”(见索引更多)
print(dvs.keys())
# DataFrame.tail(自我[n])	返回最后5行。
# print('iloc',dvs.tail)

       商品ID       类别ID  门店编号     单价     销量           成交时间  \
0  30006206  915000003  CDNL  25.23  0.328  2017/1/3 9:56   
1  30163281  914010000  CDNL   2.00  2.000  2017/1/3 9:56   
2  30200518  922000000  CDNL  19.62  0.230  2017/1/3 9:56   
3  29989105  922000000  CDNL   2.80  2.044  2017/1/3 9:56   
4  30179558  915000100  CDNL  47.41  0.226  2017/1/3 9:56   

                       订单ID  
0  20170103CDLG000210052759  
1  20170103CDLG000210052759  
2  20170103CDLG000210052759  
3  20170103CDLG000210052759  
4  20170103CDLG000210052759  
914010000
2.0
修改以前的值 0    25.23
1     2.00
2    19.62
3     2.80
4    47.41
Name: 单价, dtype: float64
修改以后的值 0    26.00
1    26.00
2    26.00
3     2.80
4    47.41
Name: 单价, dtype: float64
       商品ID     单价
0  30006206  26.00
1  30163281  26.00
2  30200518  26.00
4  30179558  47.41
iloc 商品ID                    30163281
类别ID                   914010000
门店编号                        CDNL
单价                            26
销量                             2
成交时间               2017/1/3 9:56
订单ID    20170103CDLG000210052759
Name: 1, dtype: object
('商品ID', 0    30006206
1    30163281
2    30200518
3    29989105
4    30179558
Name: 商品ID, dtype: int64)
Index(['商品ID', '类别ID', '门店编号', '单价', '销量', '成交时间', '订单ID'], dtype='object')

聚合 函数的

# DataFrame.apply(自我,func(轴,…))	应用一个函数DataFrame沿着一个轴。
DataFrame.apply(func, #接收functions。表示应用于每行/列的函数。无默认
                axis=0, #接收0或1。代表操作的轴向。默认为0。
                broadcast=False, #接收boolearn。表示是否进行广播。默认为False
                raw=False,#接收boolearn。表示是否直接将ndarray对象传递给函数。默认为False。
                reduce=None,接收boolearn或者None。表示返回值的格式。默认None。
                args=(), 
                **kwds、
import pandas as pd
data = pd.read_csv('./order-14.3.csv',nrows=5,encoding='gbk')
# data.apply(lambda x: x+1))
# DataFrame.agg(自我,func(轴))	总轴指定使用一个或多个操作。
import pandas as pd
import numpy as np
data = pd.read_csv('./order-14.3.csv',nrows=5,encoding='gbk')
data['单价'].agg([np.sum,np.mean])
sum     97.060
mean    19.412
Name: 单价, dtype: float64
# groupby方法拆分数据
DataFrame.groupby(by=None,#接收list,string,mapping或generator。用于确定进行分组的依据
                  axis=0,#接收int。表示操作的轴向,默认对列进行操作。默认为0。
                  level=None,#接收int或者索引名。代表标签所在级别。默认为None。
                  as_index=True,#接收boolearn。表示聚合后的聚合标签是否以DataFrame索引形式输出。默认为True
                  sort=True,#接收boolearn。表示是否对分组依据分组标签进行排序。默认为True
                  group_keys=True,#接收boolearn。表示是否显示分组标签的名称。默认为True。
                  squeeze=False,#接收boolearn。表示是否在允许的情况下对返回数据进行降维。默认为False。
                  **kwargs)

分组函数

data.groupby('门店编号').agg([np.sum,np.mean])
商品ID类别ID单价销量
summeansummeansummeansummean
门店编号
CDNL15053866830107733.64588010103917602020.697.0619.4124.8280.9656
# 描述分析DataFrame数据
data.describe()
商品ID类别ID单价销量
count5.000000e+005.000000e+005.0000005.000000
mean3.010773e+079.176020e+0819.4120000.965600
std1.015305e+054.035082e+0618.6876740.965347
min2.998910e+079.140100e+082.0000000.226000
25%3.000621e+079.150000e+082.8000000.230000
50%3.016328e+079.150001e+0819.6200000.328000
75%3.017956e+079.220000e+0825.2300002.000000
max3.020052e+079.220000e+0847.4100002.044000
pd.Timestamp(
    data, #接收array。表示DatetimeIndex的值。无默认。
    freq ,#接收string。表示时间的间隔频率。无默认。
    start, #接收string。表示生成规则时间数据的起始点。无默认。
    periods, #表示需要生成的周期数目。无默认。
    en,#d #接收string。表示生成规则时间数据的终结点。无默认。
    tz,# 接收timezone。表示数据的时区。默认为None。
    name #接收int,string。默认为空。指定DatetimeIndex的名字。
)
DatetimeIndex 
PeriodIndex
# 属性名称 说明 属性名称 说明
# year 年 week 一年中第几周
# month 月 quarter 季节
# day 日 weekofyear 一年中第几周
# hour 小时 dayofyear 一年中的第几天
# minute 分钟 dayofweek 一周第几天
# second 秒 weekday 一周第几天
# date 日期 weekday_name 星期名称
# time 时间 is_leap_year 是否闰年
import pandas as pd

data = pd.read_csv('./order-14.3.csv',nrows=5,encoding='gbk')
dt = pd.DatetimeIndex(data['成交时间'])
print(dt)
print(dt.year)
DatetimeIndex(['2017-01-03 09:56:00', '2017-01-03 09:56:00',
               '2017-01-03 09:56:00', '2017-01-03 09:56:00',
               '2017-01-03 09:56:00'],
              dtype='datetime64[ns]', name='成交时间', freq=None)
Int64Index([2017, 2017, 2017, 2017, 2017], dtype='int64', name='成交时间')

加减时间

# Timedelta(

透视表

pands.pivot_table(data,#接收DataFrame。表示创建表的数据。无默认
                  values=None,#接收字符串。用于指定想要聚合的数据字段名,默认使用全部数据。默认为None。
                  index=None, #接收string或list。表示行分组键。默认为None。
                  columns=None,#接收string或list。表示行分组键。默认为None。
                  aggfunc='mean', #接收string或list。表示列分组键。默认为None。
                  fill_value=None,#接收functions。表示聚合函数。默认为mean。
                  margins=False,#接收boolearn。表示汇总(Total)功能的开关,设为True后结果集中会出现名为“ALL”的行和列。默认为True
                  dropna=True,#接收boolearn。表示是否删掉全为NaN的列。默认为False
                  margins_name='All')
pandas.crosstab(index,#接收string或list。表示行索引键。无默认。
                columns,#接收string或list。表示列索引键。无默认。
                values, #接收array。表示聚合数据。默认为None。
                aggfunc ,#接收function。表示聚合函数。默认为None。
                rownames ,#表示行分组键名。无默认。
                colnames, #表示列分组键名。无默认。
                dropna ,#接收boolearn。表示是否删掉全为NaN的。默认为False。
                margins, #接收boolearn。默认为True。汇总(Total)功能的开关,设为True 后结果集中会出现名为“ALL”的行和列。
                normalize,# 接收boolearn。表示是否对值进行标准化。默认为False。
               )




DataFrame.applymap(自我、函数)	一个函数应用于Dataframe elementwise。
DataFrame.add(自我,其他[,,水平,])	除了dataframe和其他,element-wise(二元运算符添加)。
DataFrame.sub(自我,其他[,,水平,])	减法dataframe和其他,element-wise(二元运算符子)。
DataFrame.mul(自我,其他[,,水平,])	乘法dataframe和其他,element-wise(二元运算符mul)。
DataFrame.div(自我,其他[,,水平,])	获得浮动dataframe分工和其他element-wise(二元运算符truediv)。

DataFrame.dropna(自我,,如何打,))	删除缺失值。
DataFrame.fillna(自我、价值、方法、…))	使用指定的方法填补NA / NaN值。
DataFrame.replace(自我(to_replace,价值,))	替换值了to_replace与价值。
DataFrame.interpolate(自我、方法、轴,))	根据不同的方法插入值。
DataFrame.drop(自我(标签、轴、索引…))	删除指定行或列的标签。
DataFrame.drop_duplicates(自我[子集,)	返回DataFrame删除重复的行,选择只考虑某些列。
                             DataFrame.append(自我,其他[])	添加行其他的调用者返回一个新的对象。
DataFrame.assign(自我\ * \ * kwargs)	DataFrame分配新列。
DataFrame.join(自我,其他[,,,)	另一个DataFrame的连接列。
DataFrame.merge(自我,(,,,))	合并DataFrame或命名的系列对象数据库样式加入。
DataFrame.update(自我,其他(加入,))	从另一个DataFrame使用non-NA值修改到位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值