Data100学习笔记- Pandas

Data Frames, Series, and Indices

-Data frame: 2D tabular data ( a collection of series that all share the same index)
-Series: 1D data/ columnar data
-Index: A sequence of row labels (不一定是数字,不需要unique)
Column name通常是unique的(数字1 和 string “1” 被认为是不同的;相同的column名称会被自动修改成 name name1 name2)


Basic operations

读取 elections = pd.read_csv("elections.csv")

创建

new_elections =  pd.DataFrame({
    result:["win","lose"], 
    colunName:["Acontent","Bcontent"]
})
截取开头或结尾的内容,行数可以自定义
elections.head()
eletions.tail()
//可以将index改成任意column
elections_year_index = pd.read_csv("elections.csv", index_col = "Year") //返回的是copy
elections_party_index = elections.set_index("Party") //效果相同

Random Sample

elctions.sample(20)

The [] Operator

Indexing with []

Column name argument to [ ] 产生 Series
List Argument to [ ] 产生 Data Frame
[ :] row slicing. [inclusive : exclusive]

//Series
elections_year_index["Candidate"] 
//Data Frame
elections_year_index[ ["Candidate", "Party"] ]
elections_year_index[ ["Candidate"] ]
elections_year_index["Candidate"].to_frame()
//get 第二到第四行
elections_year_index[2:5]
//get first row
elections_year_index[0:1]
//error if there is no column named numeric 0
elections_year_index[0]

Boolean Array Selection and Querying

//假设一共6行,需要第2 3 5行(获得胜利的)
elections[ [False, True, True, False, True, False] ]
//需要获得胜利的
elections[ elections["Result"] == "win" ]
elections[ (elections["Result"] == "win") &(elections["someOthercolumn"] < someothercondition) ] //可以组合

isin() 和 query()

elections['Party'].isin(["Republican", "Democratic"])  //返回list of true or false
elections[elections_year_index['Party'].isin(["Republican", "Democratic"])] //返回符合要求的row
//query 快捷输入筛选条件
elections_year_index.query("Result == 'win' and Year < 2000") //返回符合要求的row

Not:~ (e.g A不等于B: ~(A==B) )

Index with loc and iloc

Loc: Access values by labels(names), index
iloc: Access value by position
(因为index不一定unique,所以index不等于position, position更像传统意义上的数组index)

Loc (inclusive on both end)

elections.loc[ [index_name, iname2, iname 3], ["column name1", "cname2"]]
elections_year_index.loc[[1980, 1984], ['Candidate','Party']] //返回数据可能不止两条 可能有多条index为1980/1984的row
//slice here is inclusive on both end
elections.loc[0:4, 'Candidate':'Year'] //返回data frame
elections.loc[0:4, 'Candidate'] //返回series
elections.loc[0:4, ['Candidate']] //返回data frame
elections.loc[0, 'Candidate':'Year']  //series
elections.loc[[0], 'Candidate':'Year']  //data frame
//loc支持boolean arrays,所以也可以进行row 和column的筛选
elections.loc[[True, False, False, True], 'Candidate':'%']

elections.loc[['Party']] 
'If we omit the column argument altogether, the default behavior is to retrieve all columns.'

iloc

elections.iloc[0:3, 0:3] //返回top3 rows, exclusive on right end

Some Useful Function

max(A)
np.mean(A)
DF.head()
DF.size //all entries, row*column
DF.shape //(row, column)
DF.describe()
DF.sort_values('columnName', ascending=False) //默认升序ascending = true
DF.query()
Series.value_counts()
Series.unique() //  returns all unique values as a numpy array

Series.str

babynames["Name"].str.startswith('J').head(10)
Series.contains('as').sample(5) //随机5行
Series.str.split('a').to_frame().head(5)
Series.str.split(',').str[1]
Series.str.len()

GroupBy

DF.groupby("name").agg(f)
DF.groupby(" ").size()
DF.groupby(" ").filter()
DF.groupby(["Year", "Sex").agg(f)

Pivot Tables

babynames_pivot = babynames.pivot_table(
    index='Year', # the rows (turned into index)
    columns='Sex', # the column values
    values='Count', # the field(s) to processed in each group
    aggfunc=np.max, # group operation
)

Join

elections.merge(presidents, 
            how = "inner",
            left_on = "Candidate", right_on = "President")
pd.merge(leftDF, rigthDF, how = "left", on = "id")

Left join / Right join / Inner join / Outer join

Read data from zip file

join_demo_filename = "lec6_join_demo_data.zip"
my_zip = zipfile.ZipFile(join_demo_filename, 'r')  //打开
list_names = [f.filename for f in my_zip.filelist]
list_names
my_zip.extractall() //unzip all

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