Pandas的奇幻都市1:数据科学的冒险之旅

71 阅读6分钟

嘿,数据科学的探险家们!今天我们要踏上一段奇幻的冒险之旅,探索Pandas这座繁华的都市。准备好你的数据背包,带上你的好奇心,咱们出发吧!

Series:数据的单行公寓

在Pandas的都市里,Series就像是数据的单行公寓。你可以用一维数据创建一个Series,就像租了一间单行公寓。

import numpy as np
import pandas as pd
my_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)#不忽略NaN
df.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