嘿,数据科学的探险家们!今天我们要踏上一段奇幻的冒险之旅,探索Pandas这座繁华的都市。准备好你的数据背包,带上你的好奇心,咱们出发吧!
Series:数据的单行公寓
在Pandas的都市里,Series就像是数据的单行公寓。你可以用一维数据创建一个Series,就像租了一间单行公寓。
import numpy as npimport pandas as pdmy_series = pd.Series(np.array([4, -7, 6, -5, 3, 2])) #创建print(my_series.values) #[ 4 -7 6 -5 3 2]print(my_series.index) #RangeIndex(start=0, stop=6, step=1)
你还可以指定索引,就像给你的公寓加上门牌号。
my_series = pd.Series(np.array([4, -7, 6, -5, 3, 2]), index=["a", "b", "c", "d", "e", "f"])
通过字典来创建Series,就像是用不同的材料建造公寓。
my_dict = {"f": 2, "c": 6, "d": -5, "e": 3, "a": 4, "b": -7}my_series = pd.Series(my_dict)
如果你只需要一个标量值,也可以创建一个单间公寓。
my_series = pd.Series(3, index=[1]) #需要写索引也就是key
DataFrame:数据的高层大厦
如果Series是单行公寓,那么DataFrame就是数据的高层大厦。你可以用多种方式创建一个DataFrame,就像在都市里建造一栋大厦。
#通过一维数据创建d = { "Open": pd.Series([136, 137, 140, 143, 141, 142], index=['2021-07-01', '2021-07-02', '2021-07-06', '2021-07-07', '2021-07-08', '2021-07-09']), "High": pd.Series([137, 140, 143, 144, 144, 145], index=['2021-07-01', '2021-07-02', '2021-07-06', '2021-07-07', '2021-07-08', '2021-07-09']), "Low": pd.Series([135, 137, 140, 142, 140, 142], index=['2021-07-01', '2021-07-02', '2021-07-06', '2021-07-07', '2021-07-08', '2021-07-09']), "Close": pd.Series([137, 139, 142, 144, 143, 145], index = ['2021-07-01', '2021-07-02', '2021-07-06', '2021-07-07', '2021-07-08', '2021-07-09'])}df = pd.DataFrame(d)
你还可以用ndarray、列表、字典、元组等多种材料建造你的数据大厦。
d = {"Open": np.array([136, 137, 140, 143, 141, 142]),} # ndarray 的字典d = {"Open": [136, 137, 140, 143, 141, 142],} # 列表的字典d = [{"Open": 136, "High": 137, "Low": 135, "Close": 137}, {"Open": 137, "High": 140, "Low": 137, "Close": 139},] # 字典的列表d = [(136, 137, 135, 137),] # 元组的列表df = pd.DataFrame(d, index=['2021-07-01', '2021-07-02', '2021-07-06', '2021-07-10'])
常用属性
- df.shape 查看形状,几行几列df.index 查看列头df.colums 查看行头
数据操作:都市的日常生活
在Pandas的都市里,数据操作就像是日常生活中的各种活动。你可以计算描述统计、进行排序、处理缺失值、拼接数据等等。
转换为numpy
- Srties.to_numpy() 一维数据转换DataFrame.to_numpy() 二维数据转换
计算描述统计
计算描述统计就像是给你的数据大厦做体检,看看它的健康状况。
常用方法:sum()和,mean()平均,cumsum()累计和,cumprod()累计积
DataFrame对象:使用这些方法需要指定axis参数。行计算:axis的值为index或0;列计算axis的值为columns或1.
my_series = pd.Series(np.array([4, -7, 6, -5, 3, 2, np.NaN, 8, 1, -9]))my_series.sum(skipna=False)#不忽略NaNdf.sum(axis=0, skipna=False)
函数 | 描述 |
---|---|
count | 非 NaN 值的数量 |
sum | 值的求和 |
mean | 值的平均数 |
median | 值的算术中位数 |
min、max | 计算最小值和最大值 |
std | 样本值的标准差 |
var | 样本值的方差 |
idxmin、idxmax | 计算能够获取到最小值和最大值的索引 |
quantile | 计算样本的分位数(0到1) |
describe汇总统计
describe()函数就像是给你的数据大厦做全面的体检报告。
- 只统计数字列为非数子的每个元素统计次数,所有元素的最高次数排除NaN
df.describe()df.describe(include=['object']) #对内容类型过滤
排序
排序就像是给你的数据大厦做整理,让它看起来更整洁。
#sort_index 根据index排序 ascending=False降序print(df.sort_index(axis=1, ascending=False))#sort_value 根据value排序 by=['A']根据A列排序 ascending=False降序print(df.sort_index(by=['A'], ascending=False))
索引与切片
索引和切片就像是给你的数据大厦做精细的装修,让你可以轻松找到每一个房间。
.loc['a'] == ['a'] == .get('a',np.NaN) # 使用的是轴标签.iloc[1]==[1] # 使用的是整数# 切片[ : ] # 使用整数切片不包含最末的那个元素,而使用对象的索引进行切片时是包含最末的那个元素的。
处理缺失值
处理缺失值就像是给你的数据大厦做修补,让它更加完美。
.isnull() / .notnull() # 返回布尔值.dropna() # 空>1的 行.dropna((axis=1)) # 空>1的列.dropna(how='all') # 全空的行.dropna(axis=1, how='all') # 全空的列.dropna(thresh=3) # 空>3的 行.dropna(axis=1,thresh=3) # 空>3的 列.dropna(inplace=True) # 操作原对象.fillna(0) # 填充缺失为0.fillna(method='ffill') # 列的方向上用前面的非空值填充后面的缺失值.fillna(method='ffill', axis=1) # 行....fillna(method='bfill') # 列的方向上用后面的非空值填充前面的缺失值.fillna(method='bfill', axis=1) # 行....fillna(method='ffill', limit=1) # limit填充次数.replace(np.NaN, 140) # 把所有的 np.NaN 替换为 140 inplace=True在原对象上替换
拼接:数据的扩建工程
拼接数据就像是给你的数据大厦做扩建,让它变得更大更强。
.concat([df1, df2])# axis:指出在哪个坐标轴的方向上进行拼接。可取的值为 `0/index,1/columns`,默认为 0。# join:指出拼接的方式,可取的值为 `inner交集(多的舍弃),outer合集(多的列/行不舍弃)`,默认为 `outer`。# ignore_index:指出是否使用拼接轴上的索引,可取的值为 `False、True`,默认为 False。当为 False 时,表示使用拼接轴上的索引;当为 True 时,表示不使用拼接轴上的索引,而是自动生成的索引。.merge()pd.merge(df1, df2, on='name'#键, how='left'#链接方式,suffixes=('_left', '_right')#重名的标题指定后缀)# 链接方式:默认inner ,多对多产生的是笛卡儿积
df1 = pd.DataFrame({'name': ['Bob', 'Bob', 'Alice', 'Charlie', 'Alice', 'Alice', 'Bob'], 'score1