Pandas基础 (2020.04.08)

1. Series的定义与使用

  • Series 是一个带有名称显性索引一维数组
  • Series 中包含的数据类型可以是整数、浮点、字符串、列表、元组、ndarray等(类型唯一,否则向上转型)。
# pd.Series(['data=None', 'index=None', 'dtype=None', 'name=None'],)
import numpy as np
import pandas as pd

1.默认索引
pd.Series([1,2,3,4])  #大小写敏感
# out: index  value
# 0    1
# 1    2
# 2    3
# 3    4
# dtype: int64

pd.Series([1,2,3,4]).values
# out: array([1, 2, 3, 4])  Series底层为np数组,故有相同性质
# 当dtype为Object时,大多数都是字符串
pd.Series([1,2,3,4]).index   #获取索引值,也可以切片

2.添加索引标签
index_labels = ['蜘蛛侠', '灭霸', '奇异博士', '钢铁侠', '蝙蝠侠', '索尔']
age = [22, 3000, 33, 37, 40, 1500]  # data 只能是一维

heroes_age = pd.Series(data=age,index=index_labels)   #索引index作为pd.Series()中的参数来为heroes_age指定索引
# 等价于
heroes_age.index = age   #前提是,值已经用pd.Series生成,此时只需要替换index
heroes_age 

# 输出:
# 蜘蛛侠       22
# 灭霸      3000
# 奇异博士      33
# 钢铁侠       37
# 蝙蝠侠       40
# 索尔      1500
# dtype: int64

3. 切片与取值
3.1 切片
heroes_age[0:5]  ·#索引值切左闭右开,结果到蝙蝠侠。
#也可以用自定义索引来切
heroes_age[0:‘索尔’]  #索引标签切,左闭右闭
#序列结果
heroes_age[['索引标签' or 索引值,]]

3.2 Series名字与索引名字
# Series名字
heroes_age.name = '英雄年龄'  #也可以在pd定义时用参数加
# Series索引名字
heroes_age.index.name = '英雄名称'

3.3 get方法,与Dict一样
heroes_age.get(index_label,取不到值的返回值)

2. DataFrame的定义与使用

DataFrame 是一个带有索引二维数据结构,每列可以有自己的名字,并且可以有不同的数据类型。你可以把它想象成一个 excel 表格或者数据库中的一张表,也可以将它想象成由多个Series拼接成的一个DataFrame,公用一个索引,它是最常用的 Pandas 对象。

pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

1. 数组转换成DataFrame
a=np.arange(1,10).reshape(3,3)
pd.DataFrame(a)
数组转换
2. 字典转化
# "键"会作为列标签,"键"对应的"值"会作为该列名对应的数据列。

data = {"年龄":[19, 3000, 30, 37, 40, 1500], 
        "出生地":["纽约皇后区", "泰坦星球","费城", "纽约", "哥谭",  "阿斯加德" ]}
index=pd.Index(['蜘蛛侠', '灭霸', '奇异博士', '钢铁侠','蝙蝠侠', '索尔' ],name='英雄名')

aa=pd.DataFrame(data=data,index=index)
aa

#行索引:Index(['蜘蛛侠', '灭霸', '奇异博士', '钢铁侠', '蝙蝠侠', '索尔'], dtype='object', name='英雄名')
aa.index
#列索引:Index(['年龄', '出生地'], dtype='object')
aa.columns
字典转换
3.通过嵌套列表转化,更加直观化
# 先构建一个二维数组data,ndarray也可以
# 然后再生成一个列标签columns,
# 最后生成一个Index对象。这样,data、colunms、Index三个对象就构成了DataFrame。

data = [[19, "纽约皇后区"], 
        [3000, "泰坦星球"], 
        [30, "费城"], 
        [37, "纽约"], 
        [40, "哥谭"], 
        [1500, "阿斯加德"]]

index = pd.Index(data=['蜘蛛侠', '灭霸', '奇异博士', '钢铁侠','蝙蝠侠', '索尔' ], name="英雄姓名")
columns =pd.Index(data=["年龄", "出生地"], name="属性")

user_info_01 = pd.DataFrame(data=data, index=index, columns=columns)
user_info_01
嵌套列表转化

3. DataFrame的数据提取

3.1 根据列标签提取列

user_info=user_info_01.copy()
user_info['出生地']   #取值
user_info.出生地   #与上边通用

#输出:
英雄姓名
蜘蛛侠     纽约皇后区
灭霸       泰坦星球
奇异博士       费城
钢铁侠        纽约
蝙蝠侠        哥谭
索尔       阿斯加德
Name: 出生地, dtype: object

#提取多列,也可以用于列位置的互换,返回新的DataFrame
user_info[["出生地", "年龄"]]
取多列

3.2 取行(.loc[] 与 .iloc[])

df.loc[ ]语法 user_info.loc[索引行,索引列 ]适用于有行列标签情况

3.2.1 行列都限定
3.2.2 限定行,取所有列
3.2.3 限定列,取所有行

以上代码均返回DataFrame对象,如果要返回可直接操作数据如下:


可操作数据

3.2.4 iloc

df.iloc[ ]语法 user_info.iloc[索引行,索引列 ] iloc意识是:index_loc


注意:取DataFrame情况

多行情况

3.3 数据的增加与修改

1. 增加行,源结构无神奇女侠
user_info.loc['神奇女侠',:] = [2000,'天堂岛', None]

2. 更该行
#修改奇异博士的年龄:30岁变35岁
user_info.loc['奇异博士',:] = [35,'费城', None]

3. 更改特定属性值
user_info.loc['奇异博士','年龄'] = 36
user_info.iloc[2,0] = 36

4. 增加或修改列,常用的为将序列赋值到列
# List、Tuple、ndarray、Series、range等
user_info['性别'] = ['男','男','男','男','男','男','女']
user_info['性别'] = '男'  #自动填充整列

5. 删除
# df.drop(['labels=None', 'axis=0', 'index=None', 'columns=None', 'level=None', 'inplace=False'],) 
user_info.drop(index="灭霸")  #drop行,不改变原表
user_info.drop(columns='血型')  #drop,列
user_info.drop(axis=1,labels='血型')  #axis = 0为行,1为列

# 删除某行后的全部行,关键在于tolist
index_list = user_info.index.tolist()[x:y]  #用切片
user_info.drop(index = index_list)

6. 更改列的顺序
  1) 直接DF[名字list] -> step_02=new_infor[['Hero Name','Sex','Age','Birthplace','weapon']]
  #注意,1)不赋值的话不改变原表
  2) 列很多的情况
    先 new_infor.columns[] 和tolist变化赋值做出目标List
    然后在用 1)

7.更改索引和列名
  1) 改索引:df.index = 新索引list
     列:df.colums = []
  2) 用rename()
     old_index=['蜘蛛侠', '灭霸', '奇异博士', '钢铁侠', '蝙蝠侠', '索尔']
     new_index=["荷兰弟","乔什·布洛林","本尼迪克特·康伯巴奇","小罗伯特·唐尼","本·阿弗莱克","克里斯·海姆斯沃斯"]
     index=dict(zip(old_index,new_index))
     df.rename(index=index)  #会新旧一一对应的改
  3) 列名同理:
     c={"年龄":"Age","出生地":"Birthplace","血型":" blood group"}
     df=df.rename(columns=c)

3.4 表级操作

3.4.1 表合并
  1. pd.concat()
    pd.concat(表1,表2,axis = 0) axis = 0是纵向合并(行添加),1为横向(列添加)
  2. df.append()
    df_name.append(other_df)纵向追加
  3. pd.merge() 类SQL连接
    pd.merge('df1', 'df2', "how='inner'", 'on=None', 'left_on=None', 'right_on=None)
- how:
    - left:仅使用左框架中的键,类似于SQL左外连接;保留关键顺序
    - right:仅使用右框架中的键,类似于SQL右外连接;保留关键顺序
    - outer:使用来自两个帧的键的并集,类似于SQL full outer加入;按字典顺序排序键
    - inner:使用两个帧的交集,类似于SQL内部加入;保留左键的顺序


pd.merge(user_info_01,user_info_02,how="left",left_on="Hero Name",right_on="英雄名")
等价于SQL
select * 
from user_info_01 left join user_info_02 
     on user_info_01.'Hero Name' = user_info_02.'英雄名字'

4. 保存与读取

4.1 DF对象的保存

df_name.to_csv("new_file.csv")

4.2 Pandas级别的保存与读取

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

推荐阅读更多精彩内容