Pandas

Series

  • 定义
    一列索引,一列数据,一共两列。
    如果使用字典创建,每一行数据对应字典的一个键值对。
    如果使用列表创建,列表内容作为数据,索引从0开始自动生成。
    series的列名固定是0,name属性表示整个Series的名字。
  • 转datafriame
    a) 保留索引
import pandas

series = pandas.Series(
{'语文': 90,
 '数学': 92,
 '物理': 100,
 '化学': 88})

df = pandas.Dataframe(series)

    b) 索引和数据变为dataframe的两列数据

df = series.reset_index()
  • 修改数据类型
# 方法一
series = series.astype(float)

# 方法二
series = series.map(float)
  • 追加数据
# 方法一
series = series.append(
pandas.Series({'政治': 80, '生物': 90}))

# 方法二
series = pandas.concat(
[series, 
 pandas.Series({'政治': 80, '生物': 90})])

# 方法三
series['政治'] = 80
series['生物'] = 90

Dataframe

  • 定义
    一列索引,任意列数据。
    每一列数据对应字典的一个键值对。
df = pandas.Dataframe(
{'姓名': ['小明', '小刚', '小赵', '小强'],
 '性别': ['男', '女', '男', '女'],
 '年龄': [18, 17, 15, 16]
})
  • 追加数据
# axis = 1表示将两个df水平拼接,默认为竖直拼接
df = pandas.concat([df1, df2], axis = 1)

# 上下限guard
df['age'] = df['age'].clip(0, 100)
  • 切片
# 取前5行
df.head(5)

# 取后5行
df.tail(5)

# 采样10行
df.sample(10)
 
  • 统计信息
# 基本信息
df.info()

# 统计信息
df.describe()

# 各个值的个数
df.value_counts()

# 是否包含空值
df.isnull().sum()

# 将空格替换为中位数
median = df['age'][df['age'] != ' '].median()
df.loc[df['age'] == ' ', 'age'] = median

# 最大和最小5个数
df['age'].nlargest(5)
df['age'].nsmallest(5)

# 累加
df['age'].cumsum()
  • 与csv的相互转换
# 从csv读取, 默认csv中全是数据
df = pandas.read_csv('data.csv')
# 从csv读取,让csv中第一列变成dateframe的index
df = pandas.read_csv('data.csv', index_col=0)

# 如果想把索引列再变成数据
df.reset_index(inplace=True)

# 读取指定列
df = pandas.read_csv('data.csv', usecols=['time', 'age'])

# 读取指定类型
df = pandas.read_csv('data.csv', datatype={'id': str})

# 替换True,False
df = pandas.read_csv('data.csv', true_values=['对'], false_values=['错'])

# 替换成NaN
df = pandas.read_csv('data.csv', na_values=['不', '否'])

# 指定日期的解析格式
from datetime import datetime
pandas.read_csv('data.csv',
sep="\t",
parse_dates=["date"],
date_parser=lambda x: datetime.strptime(x, "%Y年%m月%d日"))

# 写入csv
df.head(50).to_csv('new_data.csv')
  • 修改
# 修改列名
df.columns = [’name', 'gender', 'age']

# 修改列的数据格式
df['date'] = df['date'].astype(float)
df['date'] = pandas.to_datetime(df['date'])
df['year'] = df['date'].dt.year

# 改变列的映射
df['age'] = df['age'].map({'男':1, '女':0})

# 改变列的顺序
df = df[['D', 'C', 'B', 'A']]

# 删除列
df.drop(columns=['age', 'gender'], inplace=True)

# 删除包含NaN的行
df.dropna()

# 填充NaN为0
df.fillna(0)

# 重置索引列
df.reset_index(reset=True)

  • 创建日期index
# 创建31个日期格式的index,从'2022-10-9'开始,每个间隔一天
date_range = pandas.date_range(start='2022-10-9', periods=31)

# 创建2022年的所有周一的日期格式的index
date_range = pandas.date_range(start='2022-01-01',
end='2022-12-31',
freq='W-Mon'
  )

# 创建2022-10-1中24小时的日期形式的index
date_range = pandas.date_range(start='2022-10-1',
end='2022-10-2',
freq='H',
# closed默认左右都闭,left为左闭右开
closed=left
)

# 判断日期是一年中的哪一天
df['day_of_year'] = df['day'].dt.dayofyear

freq参数:


pandas freq参数
  • 统计函数
df.count()          #非空元素计算
df.min()            #最小值
df['age'].argmin    #第一个最小值的index
df.max()            #最大值
df.isnull()         #是否为空
df.corr()           #相关矩阵
df.idxmin()         #最小值的位置,类似于R中的which.min函数
df.idxmax()         #最大值的位置,类似于R中的which.max函数
df.quantile(0.1)    #10%分位数
df.sum()            #求和
df.mean()           #均值
df.median()         #中位数
df.mode()           #众数
df.var()            #方差
df.std()            #标准差
df.mad()            #平均绝对偏差
df.skew()           #偏度
df.kurt()           #峰度
df.describe()       #一次性输出多个描述性统计指标
df.abs()            #求绝对值
df.prod             #元素乘积
df.cumsum           #累计和
df.cumprod          #累计乘积

# 求每年的收盘均值
df.groupby('year')['close'].mean()
  • 条件筛选
# 筛选年龄在30以下,性别为女的姓名
df.loc[(df['age'] < 30) & (df['gender'] == 0), 'name']
# 将筛选结果新建一列
df['target'] = (df['age'] < 30) & (df['gender'] == 0)
df['target'] = df['target'].map(lambda x: 1 if x else -1)
  • numpy统计函数
import numpy

# 正态分布, 中心值为0,方差为1
numpy.random.normal(loc=0, scale=1, size=1000)

# 二项分布,样本数为1,概率为0.2
numpy.random.binomial(n=1, p=0.2, size=1000)

# 均匀分布,上限为1,下限为0
numpy.random.uniform(low=0, high=1, size=1000)

# 20个 0-1 均匀分布
numpy.random.rand(20)
# 20个 标准正态分布
numpy.random.randn(20)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • pandas Pandas是线上服务类型,数据分析和数据处理(在机器学习中数据处理) 数据分析三剑客: numpy...
    Galaxy_saturn阅读 807评论 0 1
  • 2、DataFrame DataFrame是一个【表格型】的数据结构,可以看做是【由Series组成的字典】(多个...
    仙灵儿阅读 743评论 0 1
  • 数据的分组运算和聚合 在将数据集加载、融合、准备好之后,通常就是计算分组统计或⽣成透视表, pandas提供了⼀个...
    222AblackA阅读 264评论 0 1
  • pandas统计分析 pandas主要包括两个数据结构,即Series对象和DataFrame对象,本章主要介绍如...
    爱读书的无业游民阅读 786评论 0 1
  •   说起pandas这个是python数据清洗的利器,它可以让你像sql一样操作数据,同时可以对数据进行各种计算,...
    不分享的知识毫无意义阅读 15,489评论 1 15