Pandas 常用API

import pandas as pd

# Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。
1. Series 构造
1.1 普通构造
pd.Series(data 一组数据, 
         index 索引标签 默认为0开始, 
         dtype 数据类型-默认自行判断, 
         name 设置名称, 
         copy 拷贝数据-默认为False)

1.2 使用kv对,类似字典来创建Series
dist = {1: "A", 2: "B", 3:"C"}
myvar = pd.Series(dist)
# 如果只需要一部分数据,根据索引导入即可
myvar = pd.Series(dist, index = [1, 2])


2. 索引
2.1 指定索引值
data = ["A", "B", "C"]
myvar = pd.Series(data, index=["x", "y", "z"])

2.2 根据索引值读取数据
myvar["y"]

# DataFrame
===========================================================================
1. 生成数据表
1.1 导入csv或xlsx文件
df = pd.DataFrame(pd.read_csv('name.csv', header = 1)) # 保留表头
df = pd.DataFrame(pd.read_excel('name.xlsx'))

方法2:
from collections import namedtuple
Item = namedtuple('Item', 'reply pv')
items = []
with codecs.open('reply.pv.07', 'r', 'utf-8') as f:
    for line in f:
        line_split = line.strip().split('\t)
        items.append(Item(line_split[0].strip(), line_split[1].strip()))
        # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。 
df = pd.DataFrame.from_records(items, columns=['reply', 'pv'])

1.2 用pandas创建数据表
df = pd.DataFrame({
        "id":[1001,1002,1003,1004,1005,1006], 
        "date":pd.date_range('20130102', periods=6),
        "city":['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '],
        "age":[23,44,54,32,34,32],
        "category":['100-A','100-B','110-A','110-C','210-A','130-F'],
        "price":[1200,np.nan,2133,5433,np.nan,4432]
        },
  columns =['id','date','city','category','age','price'])



===========================================================================
2. 数据表信息查看
2.1 查看维度
df.shape

2.2 查看基本信息:维度、列名、数据格式、所占空间
df.info()

2.3 每一列数据的格式
df.dtypes # data types

2.4 某一列格式
df['B'].dtype #data type

2.5 空值
df.isnull() 
df['B'].isnull()
df.isnull().count()

2.6 查看某一列的唯一值
df.unique()

2.7 查看数据表的值
df.values

2.8 查看列名称
df.columns

2.9 查看前五行、后五行数据
df.head()
df.tail()

===========================================================================
3. 数据表清洗
df.fillna(value = 0) # 用0填充空值
df['price'].fillna(df['price'].mean()) # 使用price列的均值对na进行填充
df['city'] = df['city'].map(str.strip) # 清除city字段的字符空格
df['city'] = df['city'].str.lower() # 大小写转换
df['price'].astype('int') # 更改数据格式
df.rename(columns = {'date': 'datetime'}) # 更改列名称
df['city'].drop_duplicates() # 删除后出现的重复值
df['city'].drop_duplicates(keep = 'last') # 删除先出现的重复值
df['city'].replace('sh', 'shanghai') # 数据替换

===========================================================================
4. 数据预处理
df1=pd.DataFrame({
    "id":[1001,1002,1003,1004,1005,1006,1007,1008], 
    "gender":['male','female','male','female','male','female','male','female'],
    "pay":['Y','N','Y','Y','N','Y','N','Y',],
    "m-point":[10,12,20,40,40,40,30,20]})


df_inner = pd.merge(df, df1, how = 'inner') # 匹配合并 交集
df_left = pd.merge(df, df1, how = 'left') # left join
df_right = pd.merge(df, df1, how = 'right') # right join
df_outer = pd.merge(df, df1, how = 'outer') # 并集

result1 = df1.append(df2) # 把df2接到df1后面
result = left.join(right, on = 'key') # 左表以key为主键,left join右表

pd.concat(
    objs,                   #  一个series、df、disc对象的映射
    axis = 0,               #  默认值为0,往下接, 1则往右接
    join_axes = None,       #  {'outer', 'inner'},默认外接
    ignore_index = False,   #  默认False, True代表不要串联轴上使用的索引值
    ...
    )
frames = [df1, df2, df3]
result = pd.concat(frames)

df.set_index('id')              #   设定索引列
df.sort_values(by=['age'])      #   按指定的列的值排序
df.sort_index()                 #   按照索引列排序
df.['group'] = np.where(df['price']>2000, 'high', 'low')                #   如果price的值>2000,group列显示high,否则显示low
df.loc[(df['city'] == 'beijing') & (df['price'] >= 4000), 'sign'] = 1   #   对符合多个条件的数据进行标记
split = pd.DataFrame((x.split('-') for x in df['category']), index=df.index, columns = ['category', 'size'])    
            #   对category字段的值依次进行分列,并创建数据表,索引值为df的索引列,列名称为category和size
            #   "category":['100-A','100-B','110-A','110-C','210-A','130-F'],
df = pd.merge(df, split, right_index = True, left_index = True)         #   将分裂后的数据表于原df匹配


===========================================================================
5. 数据提取
loc     iloc     ix

df.loc[3]           #   按索引提取单行的值
df.iloc[0:5]        #   按索引提取区域行数值
df.reset_index      #   重设索引
df = df.set_index('date')   #   设置日期为索引
df[:'2013-01-04']           #   提取改日期前的所有数据
df.iloc[:3, :2]             #   按位置区域提取数据
df.iloc[[0,2,5], [4,5]]     #   按位置单独提取数据:提取第0、2、5行,4、5列

df.ix[:'2013-01-04', :4]    #   ix 按索引标签+位置提取数据:2013-01-04号之前,前四列数据

df['city'].isin(['beijing'])    #   判断city列是否为beijing
df.loc[df['city'].isin(['beijing', 'shanghai'])]    #   判断city列中是否包含beijing和shanghai,将符合条件的数据提取出来
pd.DataFrame(category.str[:3])  #   提取前三个字符,并生成数据表

       
===========================================================================
6. 数据筛选
使用与、或、非三个条件配合大于、小于、等于对数据进行筛选,并进行计数和求和。
df.loc[(与 或 非条件), [1,2]]
df.loc[(df['city']!='beijing' & df['price'] >= 200), ['id','city','age','category','gender']].sort(['id']]

df_inner.loc[(df_inner['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id']).city.count() # 对筛选后的数据按city列计数

df.query('city == ["beijing", "shanghai"]')

df.query('city == ["beijing", "shanghai"]').price.sum()     #   对筛选后的结果按price求和


===========================================================================
7. 数据汇总
df.groupby('city').count()          #   对所有的列进行计数汇总
df.groupby('city')['id'].count()    #   按城市对id字段计数
df.groupby(['city', 'size'])['id'].count()              #   对两个字段进行汇总计数
df.groupby('city')['price'].agg([len, np.sum, np.mean]) #   按city进行汇总,分别计算price的合计和均值

===========================================================================
8. 数据统计
df.sample(n=3)      #   简单的数据采样,采n个样

weights = [0,0,0,0,0.4,0.6]
df.sample(n=200, weights = weights)     #   手动设置采样权重
df.sample(n=4, replace = False)         #   采样后不放回
df.sample(n=5, replace = True)          #   采样后放回

df.describe().round(2).T                #   数据表描述性统计,round函数设置显示小数位,T表示转置
df['price'].std()                       #   计算列的标准差
df['price'].cov[df['m-point']]          #   计算两个列之间的协方差
df.cov()                                #   计算数据表中所有字段之间的协方差
df['price'].corr(df['m-point'])         #   两个字段的相关性分析,相关系数在-1到1之间,接近1为正相关,接近-1为负相关,0为不相关
df.corr()                               #   数据表的相关性分析

===========================================================================
df.to_excel('test.xlsx', sheet_name = 'abc')
df.to_csv('test2.csv')
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值