把 Pandas 对象当做增强版的 NumPy 结构化数据,行和列都能带上标签,而不是简单地整数索引。
Pandas有三个基本数据结构:Series、DataFrame 和 Index。
理清”输出“的格式问题:
分清取值和截取表格;
分清浅拷贝和深拷贝。
参考
http://www.chenchen.co.uk/2017/12/01/Pandas_reference_copy.html(写的不错!)
数据聚合与分组操作
Groupby
groupby之后再如何变回DataFrame?
向量化字符串操作
使用 Pandas 的向量化字符串的操作,从而避免通过繁琐的 for 循环来解决问题
写在最后
关于数据处理,之前有写过数据部分,以及整个数据处理的大概流程。现在,更深入地来看一些细节,比如 NumPy(Series) 和 DataFrame 的处理差别。
其实对于一维数组的操作我们处理的维度相应也是一维的:比如获取某个值、某个区间的值,但是怎么都不会超过其维度(一维),顶多选择全部的数组;而对于二维数据的操作,我们处理的维度则不再局限于一维,而是“多维”操作。也就是说可以获取某根轴上的所有数据,这就像在一维数据里面能获取单个元素的值一样轻松,再换句话说,处理一维数据和二维数据的这种转变就类似于从一维的“点”操作变成了二维里的“行/操作”(基本作战单位都变了)——操作对象改变了,操作方式当然也跟着变。
也许理解了这一点,对于groupby的操作理解会更深:
Series中以元素为基本操作单位,而DataFrame中的操作以行和列(即Series)为操作单位。
注意,列=Series。
Pandas 基本操作复习:
import pandas as pd
city = pd.Series(['Beijing', 'Shanghai', 'Wuhan', 'Nanjing', 'Shenzhen', 'Hangzhou', 'Chengdu'])
population = pd.Series([12341312, 53531253, 7457464, 2453534, 5342434, 856352, 424212])
gdp_level = pd.Series(['A+','A++', 'B++', 'B+', 'A++', 'B++', 'B+'])
area_level = pd.Series([5, 5, 5, 4, 4, 4, 4.5])
students_num = pd.Series([4323412, 3312412, 62413124 , 53451224, 2523842, 532942, 543572])
df = pd.DataFrame({'city':city,'population':population, 'gdp_level':gdp_level, 'area_level':area_level, 'students_num':students_num})
df
df[0:3]
df.loc[0:3] # 这里标签索引之所以成功是因为index是默认数字
df.loc[1,3] # (报错)这里就证明了loc是按标签索引
df.iloc[0:3]
df.iloc[1,2] # 按位置选取元素!
困惑之python打印机制
为什么一维的 NumPy 数组打印出来是一行,而 Pandas 的一维 Series 打印结果是一列,到底是 NumPy 特立独行还是?
Python数据分析之NumPy(3)—— NumPy中那些困惑:打印的形状
- 字典
print()似乎将结果进行挤压?
试一试Numpy数组:
似乎打印前后都没有区别,这也验证了Numpy中默认将一维向量视为行向量。
Pandas 的 Series 也是没变化的: