Pandas(一)数据结构和基本功能
Pandas通常是用于数据分析过程中, 数据的清洗, 数据预处理, 数据的描述性分析等过程中。在整个Python数据分析的生态环境中, Pandas的地位非常重要, 利用Pandas可以快速便捷的对数据进行各种各样的处理与操作。可以说是升级版的Excel。Pandas是基于Numpy的一个数据分析包, 它里面的内核是Numpy。
在Pandas中, 最重要的两种数据结构是1维的Series和2维的DataFrame.
Series:一维数组,与Numpy中的一维array类似。Series中能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。但是每个Series中只能保存一种数据结构.
DataFrame:二维的表格型数据结构。有多个Series共同构成的集合就变成DataFrame。
一、Series
1.手动构建Series
data = np.array([22, 3000, 33, 37, 40, 1500]) data
test = pd.Series(data)
test
还可以对Series进行一些拓展:
s = pd.Series(data ,name=\'英雄年龄\' , index= [\'蜘蛛侠\', \'灭霸\', \'奇异博士\', \'钢铁侠\', \'蝙蝠侠\', \'索尔\']) s
2.Series的索引和切片
显式索引—–字典索引
隐式索引—–列表索引
对于 Series 的索引和切片,我们可以有两种思路,一种是把它当做是一个字典,索引就是字典的 key,数据就是字典的 value。
s[\'钢铁侠\'] s[\'灭霸\':\'钢铁侠\':2]
Series 除了像 dict 外,也非常像 ndarray,这也就意味着可以采用切片操作。
s[-1] s[::2] = 100
如果想要更复杂的提取方式,可以直接采用索引值去进行数据的提取。同样也分为:显式索引和隐式索引。
s[ [0, 1, -1] ] s[[\'蜘蛛侠\', \'灭霸\', \'索尔\'] ]
df.pop()可以弹出指定数据
df.drop() 可以删除指定数据
3.广播的方法
s + 1 np.log(s) np.mean(s) s.mean()
二、DataFrame
DataFrame 是一个带有索引的二维数据结构,每列可以有自己的名字,并且可以有不同的数据类型。你可以把它想象成一个 excel 表格或者数据库中的一张表,DataFrame 是最常用的 Pandas 对象。
1.构建DataFrame
在构建 DataFrame 的时候,主要有两种思路
-
数据为字典类的格式, 是以列的方式进行组织, 字典的 key 将会作为列名,字典的值value作为列的数据.
-
数据为列表类形式, 是以行的方式进行组织的, 列名需要用参数传入进去.
#字典的方式传入数据
data = { "年龄":[19, 3000, 30, 37, 40, 1500], "城市":["纽约皇后区", "泰坦星球","费城", "纽约", "哥谭", "阿斯加德" ], "装备":[\'蜘蛛战服\',\'无限手套\',\'披风\',\'动力装甲\',\'蝙蝠战衣\',\'雷神之锤\'] } index = [\'蜘蛛侠\', \'灭霸\', \'奇异博士\', \'钢铁侠\', \'蝙蝠侠\', \'索尔\']
df = pd.DataFrame(data=data,index=index )
#列表的方式传入数据 data = [ [19, "纽约皇后区",\'蜘蛛战服\'], [3000, "泰坦星球",\'无限手套\'], [30, "费城",\'披风\'], [37, "纽约",\'动力装甲\'], [40, "哥谭",\'蝙蝠战衣\'], [1500, "阿斯加德",\'雷神之锤\'] ] data df = pd.DataFrame(data, columns=[\'年龄\', \'城市\',\'装备\'], index=index)
也可以从本地磁盘读取数据
2.DataFrame 的索引和切片
1)提取数据表中的列, 是最常用的操作之一, 因此这个操作也非常简单.
df[\'年龄\']
2)在显示索引中,把 DataFrame 的索引值当做第一个轴的 key,把列名当做第二个轴的 key
# 例如我现在想要灭霸的年龄,则需要通过行索引"灭霸" 和列索引"年龄" 去进行定位 df.loc[\'灭霸\',\'年龄\']
3)序列值索引
我们注意到, 上面的那种索引方式其实有一定的局限性, 如果想要索引的值并没有规律的 步长, 恐怕就做不到了!
语法 df.loc[索引行,索引列 ]
# 蜘蛛侠,灭霸, 蝙蝠侠的城市 df.loc[[ \'蜘蛛侠\',\'灭霸\',\'蝙蝠侠\'] , \'城市\'] # 显式索引 # 两个坐标轴都可以这样做,而且不用考虑原数据的顺序 # 奇异博士,钢铁侠和蜘蛛侠的年龄和城市信息 df.loc[ [\'奇异博士\',\'钢铁侠\',\'蜘蛛侠\'] ,[\'年龄\',\'城市\'] ]
4)隐式索引
使用 iloc
也就是 index_loc
这种方式不看你的行索引和列索引是什么名称,可以把数据当做是一个有序列表, 只看数据是处于表中的一个什么位置.
df.iloc[0::, 0::]
3.新增/删除列
在生成了 DataFrame 之后,突然你发现好像缺失了用户的性别这个信息,如何添加呢?如果所有的性别都一样,我们可以通过传入一个标量,Pandas 会自动帮我们广播来填充所有的位置。
# 使用显示索引的方式进行添加 df.loc[\'黑寡妇\'] = [43,\'前苏联\',\'手枪\']
df[\'性别\'] = \'男\' # 新增一列 性别 df
4.掩码提取数据
# 提取 30 - 100 之间的英雄 df[ (df.年龄 >= 30 ) & (df.年龄 <= 100) ] # 年龄为偶数 或 城市为 纽约 df[ (df.年龄 % 2 == 0) | (df.城市 == \'纽约\') ]
重点:1. 构建Series 2. 索引和切片 3. 序列值索引 4. DataFrame 构建 5. 从本地读取 read_csv , 写入到本地 to_csv 6. DataFrame 的索引和切片