pandas 简单使用手册

主要为记录pandas日常使用的一些函数,仅作为备忘录,不提供总结和见解。

DataFrame 和 Series

pandas的两个核心对象: DataFrame 和 Series.
DataFrame是一个表,带有独立条目,每个条目都有相对应的值,每个条目都对应到一行或者一列,最常见的语法是用一个字典来初始化一个DataFrame。

import pandas as pd
pd.DataFrame({'Yes': [50, 21], 'No': [131, 2]})
pd.DataFrame({'Bob': ['I liked it.', 'It was awful.'], 'Sue': ['Pretty good.', 'Bland.']}) # DataFrame 条目的值也可以是字符串

如果想要指定行的名称,则需要通过index参数:

pd.DataFrame({'Bob': ['I liked it.', 'It was awful.'], 
                         'Sue': ['Pretty good.', 'Bland.']},
                         index=['Product A', 'Product B'])

Series 是DataFrame的一单独列,同时可被认为是一列表,可通过一列表来初始化,

pd.Series([1, 2, 3, 4, 5])
pd.Series([30, 35, 40], index=['2015 Sales', '2016 Sales', '2017 Sales'], name='Product A') # 可以指定index

打开一个csv文件,

wine_reviews = pd.read_csv("./winemag-data-130k-v2.csv")
wine_reviews.shape   # 可以得到 DataFrame 的形状
wine_reviews= pd.read_csv("../input/wine-reviews/winemag-data-130k-v2.csv", index_col=0) # 可以在读取文件的时候指定列的名称

索引和切片

import pandas as pd
reviews = pd.read_csv("../input/wine-reviews/winemag-data-130k-v2.csv", index_col=0)
pd.set_option('max_rows', 5)
reviews.country    # 可以通过.操作符来查看表格的某一属性
reviews['country']    # 也可以通过字典索引的方式
reviews['country'][0]  # 查看country的第一行

除了这种基于python原生的方式,pandas提供了自己的方法来进行索引,lociloc,它们都是行第一,列第二的一类方法,使用iloc方法的时候通常将 DataFrame 视为一个数值矩阵,而loc更关注数据本身的内在结构,可以通过索引混合字典关键字的方式进行索引,

reviews.iloc[0]    # 查看 DataFrame 的第一行
reviews.iloc[:, 0]    # 查看 DataFrame 的第一列,: 代表所有行
reviews.iloc[1:3, 0]    # 查看 DataFrame 的第一列的第2,3行
reviews.iloc[[0, 1, 2], 0]    # 查看 DataFrame 的第一列的第1,2,3行,负数也可以用来索引
reviews.loc[0, 'country']    # 得到第一行的'country'对应的值

需要注意的是lociloc在索引上的一点小区别,iloc方法不包括最后一个索引,而loc方法包括最后一个索引,df.iloc[0:1000] 返回 1000 个值,df.loc[0:1000] 返回 1001 个值。

条件选取:

reviews.country == 'Italy'    # 查看当前数据的country属性是否为 Italy
reviews.loc[reviews.country == 'Italy']    # 选出满足条件的所有数据
reviews.loc[(reviews.country == 'Italy') & (reviews.points >= 90)]    # 索引中支持逻辑运算
reviews.loc[reviews.country.isin(['Italy', 'France'])]    # country的值在后续所给定的列表中即可
reviews.loc[reviews.price.notnull()]  # isnull 和 notnull 方法筛选出那些对应字段为NaN或者不为NaN的数据

一些统计函数

import pandas as pd
pd.set_option('max_rows', 5)
import numpy as np
reviews = pd.read_csv("../input/wine-reviews/winemag-data-130k-v2.csv", index_col=0)
reviews.points.describe()    # describe()方法返回的是对所给列的一个高等级的总结,主要包括一些统计信息,其输出类型由输入类型决定
reviews.points.mean()    # 也可以自己显式调用方法提取相应的统计信息
reviews.taster_name.unique()    # 删除重复信息
reviews.taster_name.value_counts()    # 数据出现了多少次

创建数据的新表示,简单的如数据的归一化

review_points_mean = reviews.points.mean()
reviews.points.map(lambda p: p - review_points_mean)

map() 返回了一个新的 Series ,其中所有的值都发生了变换. apply()是一种等价方式,可对 DataFrame 的每一行进行操作. map()和apply()不会对原数据做修改

def remean_points(row):
    row.points = row.points - review_points_mean
    return row
reviews.apply(remean_points, axis='columns')    # 指定索引名称的话,就会改变对应的列

将数据分组

import pandas as pd
reviews = pd.read_csv("../input/wine-reviews/winemag-data-130k-v2.csv", index_col=0)
pd.set_option("display.max_rows", 5)</pre>

reviews.groupby('points').points.count()    # 将数据按照points条目进行分组,也就是给出相同分数的数据聚合在一起,然后按照每个分数的数目进行输出

reviews.groupby(['country']).price.agg([len, min, max])    # agg方法,允许同时给出好几类不同的统计函数

countries_reviewed = countries_reviewed.reset_index()
countries_reviewed.sort_values(by='len')    # 允许最后输出的时候按照值进行排序,而不是索引,默认是一个升序排列
countries_reviewed.sort_values(by=['country', 'len'])    # 在有序列表的基础上进行二次排序

数据类型和缺失值处理

import pandas as pd
pd.set_option('max_rows', 5)
reviews = pd.read_csv("../input/wine-reviews/winemag-data-130k-v2.csv", index_col=0)

reviews.price.dtype  # 返回数据的数值类型
reviews.dtypes     # 返回每一列数据的类型

reviews.points.astype('float64')    # 数据类型转换

reviews.region_2.fillna("Unknown")    # 用给定值去代替NaN值

reviews.taster_twitter_handle.replace("@kerinokeefe", "@kerino")    # 替换方法

重命名

import pandas as pd
pd.set_option('max_rows', 5)
reviews = pd.read_csv("../input/wine-reviews/winemag-data-130k-v2.csv", index_col=0)
reviews.rename(columns={'points' : 'score'})    # 改变索引的名称,或者说列的名称;支持多种数据格式,但字典是最方便的类型
reviews.rename(index={0: 'firstEntry', 1: 'secondEntry'})    # 改变第一行和第二行的名称

组合数据的方法

df1 = pd.read_csv("../input/youtube-new/CAvideos.csv")
df2= pd.read_csv("../input/youtube-new/GBvideos.csv")
df = pd.concat([df1, df2])    # 拼接两个 DataFrame 
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容