pandas的基础用法
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,本篇内容介绍了"pandas的基础用法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!创建pandas
千家信息网最后更新 2025年12月01日pandas的基础用法
本篇内容介绍了"pandas的基础用法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创建pandas
1. 使用pd.Series()函数创建DataFrame
import pandas as pdcountry1 = pd.Series({'Name': '中国', 'Language': 'Chinese', 'Area': '9.597M km2', 'Happiness Rank': 79})country2 = pd.Series({'Name': '美国', 'Language': 'English (US)', 'Area': '9.834M km2', 'Happiness Rank': 14})country3 = pd.Series({'Name': '澳大利亚', 'Language': 'English (AU)', 'Area': '7.692M km2', 'Happiness Rank': 9})df = pd.DataFrame([country1, country2, country3], index=['CH', 'US', 'AU'])
2. 使用DataFrame()和字典创建
df = pd.DataFrame(columns=["epoch", "train_loss", "train_auc", "test_loss", "test_auc"])log_dic = {"epoch": 1, "train_loss": 0.2, "train_auc": 1., "test_loss": 0, "test_auc": 0 }df = df.append([log_dic])log_dic = {"epoch": 2, "train_loss": 0.2, "train_auc": 1., "test_loss": 0, "test_auc": 0 }df = df.append([log_dic])# 对index进行重新编号# inplace=True表示在原数据上修改# drop=True表示丢弃之前的indexdf.reset_index(inplace=True, drop=True)
3. 使用pd.concat对多个DataFrame()组合
df1 = pd.DataFrame(columns=["epoch", "train_loss", "train_auc", "test_loss", "test_auc"])log_dic = {"epoch": 1, "train_loss": 0.2, "train_auc": 1., "test_loss": 0, "test_auc": 0 }df1 = df1.append([log_dic])df2 = pd.DataFrame(columns=["epoch", "train_loss", "train_auc", "test_loss", "test_auc"])log_dic = {"epoch": 2, "train_loss": 0.1, "train_auc": 1., "test_loss": 0, "test_auc": 1 }df2 = df2.append([log_dic])# ignore_index=True表示重新对index进行编号df_new = pd.concat([df1, df2], axis=0, ignore_index=True)文件操作
1. 生成含有columns的文件
columns = ["epoch", "train_loss", "train_auc", "test_loss", "test_auc"]df_new[header].to_csv('text.txt', index=False, header=columns, sep='\t')2. 生成不含有columns的文件
df_new[header].to_csv('text.txt', index=False, header=None, sep='\t')3. 读取不含有columns的文件
df = pd.read_csv('text.txt', sep='\t', header=None, nrows=100)df.columns = ["epoch", "train_loss", "train_auc", "test_loss", "test_auc"]4. 读取含有columns的文件
# 需要使用header参数指定columns在第几行,通常是第0行df = pd.read_csv('text.txt', sep='\t', header=[0])#指定特定columns读取reprot_2016_df = pd.read_csv('2016.csv', index_col='Country', usecols=['Country', 'Happiness Rank', 'Happiness Score', 'Region'])5. 生成二进制的pickle文件
df = pd.DataFrame(columns=["epoch", "train_loss", "train_auc", "test_loss", "test_auc"])log_dic = {"epoch": 2, "train_loss": 0.1, "train_auc": 1., "test_loss": 23, "test_auc": 1 }df = df.append([log_dic])df.to_pickle('df_log.pickle')6. 加载pickle文件
df = pd.read_pickle('df_log.pickle')索引
使用下图的数据为例子
1. 行索引
df.loc['CH'] # Series类型
df.loc['CH'].index # Index(['Name', 'Language', 'Area', 'Happiness Rank'], dtype='object')df.loc['CH']['Name'] # '中国'df.loc['CH'].to_numpy() # array(['中国', 'Chinese', '9.597M km2', 79], dtype=object)
df.iloc[1] # 索引第二行
df.loc[['CH', 'US']]df.iloc[[0, 1]]
2.列索引
df['Area'] # type: Seriesdf[['Name', 'Area']] # type: DataFrame
3. 混合索引
print('先取出列,再取行:')print(df['Area']['CH'])print(df['Area'].loc['CH'])print(df['Area'].iloc[0])print('先取出行,再取列:')print(df.loc['CH']['Area'])print(df.iloc[0]['Area'])print(df.at['CH', 'Area'])删除数据
df.drop(['CH'], inplace=True) # 删除行 inplace=True表示在原数据上修改df.drop(['Area'], axis=1, inplace=True) # 删除列,需要指定axis=1
Nan数据的操作
1. 删除操作
使用下面的数据
import numpy as npdf = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'], "toy": [np.nan, 'Batmobile', 'Bullwhip'], "born": [pd.NaT, pd.Timestamp("1940-04-25"),pd.NaT] })"""axis: 0: 行操作(默认) 1: 列操作how: any: 只要有空值就删除(默认) all:全部为空值才删除inplace: False: 返回新的数据集(默认) True: 在愿数据集上操作 """df.dropna(axis=0, how='any', inplace=True)
df.dropna(axis=0, how='any', subset=['toy'], inplace=False) # subset指定操作特定列的nan
2. 填充操作
使用下面的数据
df = pd.DataFrame([[np.nan, 2, np.nan, 0], [3, 4, np.nan, 1], [np.nan, np.nan, np.nan, 5], [np.nan, 3, np.nan, 4]], columns=list('ABCD'))df.fillna(0, inplace=True)
# "横向用缺失值前面的值替换缺失值"df.fillna(axis=1, method='ffill', inplace=False)
# "纵向用缺失值上面的值替换缺失值"df.fillna(axis=0, method='bfill', inplace=False)
df['A'].fillna(0, inplace=True) # 指定特定列填充
3. 判断操作
df.isnull()df['A'].isna()
合并操作
import pandas as pdstaff_df = pd.DataFrame([{'姓名': '张三', '部门': '研发部'}, {'姓名': '李四', '部门': '财务部'}, {'姓名': '赵六', '部门': '市场部'}])student_df = pd.DataFrame([{'姓名': '张三', '专业': '计算机'}, {'姓名': '李四', '专业': '会计'}, {'姓名': '王五', '专业': '市场营销'}])1. 按照列为基准合并
inner(交集) outer(并集) left right
pd.merge(staff_df, student_df, how='inner', on='姓名')pd.merge(staff_df, student_df, how='outer', on='姓名')
2. 按照索引为基准合并
# 设置姓名为索引staff_df.set_index('姓名', inplace=True)student_df.set_index('姓名', inplace=True)pd.merge(staff_df, student_df, how='left', left_index=True, right_index=True)3. 指定不同列为基准
# 重置index为range()staff_df.reset_index(inplace=True)student_df.reset_index(inplace=True)staff_df.rename(columns={'姓名': '员工姓名'}, inplace=True)student_df.rename(columns={'姓名': '学生姓名'}, inplace=True)pd.merge(staff_df, student_df, how='left', left_on='员工姓名', right_on='学生姓名')pd.merge(staff_df, student_df, how='inner', left_on=['员工姓名', '地址'], right_on=['学生姓名', '地址'])
其它操作
report_data = pd.read_csv('./2015.csv')report_data.head()基本属性操作
data.head()data.info()data.describe()data.columnsdata.index
重命名columns
df.rename(columns={'Region': '地区', 'Happiness Rank': '排名', 'Happiness Score': '幸福指数'}, inplace=True)数据清洗操作
# null替换成0df.fillna(0, inplace=False)# 丢弃nulldf.dropna()# 前向填充df.ffill()# 后向填充df.bfill(inplace=True)
apply操作
# apply使用# 获取姓staff_df['员工姓名'].apply(lambda x: x[0])# 获取名staff_df['员工姓名'].apply(lambda x: x[1:])# 结果合并staff_df.loc[:, '姓'] = staff_df['员工姓名'].apply(lambda x: x[0])staff_df.loc[:, '名'] = staff_df['员工姓名'].apply(lambda x: x[1:])
分组
依据columns分组
grouped = report_data.groupby('Region')grouped['Happiness Score'].mean()grouped.size()# 迭代groupby对象for group, frame in grouped: mean_score = frame['Happiness Score'].mean() max_score = frame['Happiness Score'].max() min_score = frame['Happiness Score'].min() print('{}地区的平均幸福指数:{},最高幸福指数:{},最低幸福指数{}'.format(group, mean_score, max_score, min_score))定义函数分组
report_data2 = report_data.set_index('Happiness Rank')def get_rank_group(rank): rank_group = '' if rank <= 10: rank_group = '0 -- 10' elif rank <= 20: rank_group = '10 -- 20' else: rank_group = '> 20' return rank_groupgrouped = report_data2.groupby(get_rank_group)for group, frame in grouped: print('{}分组的数据个数:{}'.format(group, len(frame)))# 实际项目中,通常可以先人为构造出一个分组列,然后再进行groupby# 按照score的整数部分进行分组# 按照幸福指数排名进行划分,1-10, 10-20, >20# 如果自定义函数,操作针对的是indexreport_data['score group'] = report_data['Happiness Score'].apply(lambda score: int(score))grouped = report_data.groupby('score group')for group, frame in grouped: print('幸福指数整数部分为{}的分组数据个数:{}'.format(group, len(frame)))使用bar类型的柱状图统计每个label的个数。
train_df.label.value_counts().plot(kind='bar')
"pandas的基础用法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
姓名
数据
员工
文件
分组
幸福
指数
索引
缺失
专业
个数
函数
基准
学生
部门
面的
中国
生成
基础
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
贵阳电话软件开发是做什么的
高级设置服务名和服务器名
visio中导入数据库表
复旦思科网络技术学院
软件开发行业收入确认原则
邯郸正规软件开发哪家好
机关网络安全措施
江苏网络软件开发预算
为什么无法连通激活服务器
数据库更改表的名称
公共网络安全事件怎么落实
内蒙古诚信网络技术服务商家
文明重启的服务器在哪里
大专计算机网络技术毕业设计
魔兽世界同区可以转任意服务器吗
网络安全检查工作汇报
幼儿网络安全一敏育主题班会
有权对危险网络安全的行为
ktv有网络技术维修吗
工信部互联互通对网络安全
服务器虚拟环境怎么搭建
云智能网络安全预警仪
无线网络技术的作用
嵌入式软件开发招聘要求
网络安全周红衣郑州
黔商互联网科技有限公司
tp5 model 数据库
专业软件开发工程
技校计算机网络技术职业规划书
武汉梦耀互联网科技有限公司