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)
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 

你可能感兴趣的:(pandas 简单使用手册)