pandas的基础用法
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,本篇内容介绍了"pandas的基础用法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!创建pandas
千家信息网最后更新 2025年02月06日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安全错误
数据库的锁怎样保障安全
软件开发怎么分工最合理
登录吃鸡显示连接服务器错误
h410支持16g服务器内存吗
数据库技术发展经历的阶段有
四川腾彩软件开发有限公司
技术与网络技术就业前景
中国科学引文索引数据库注册
数据库的云化
节点转发 服务器
IGOTABOY音译软件开发
惠普服务器统一管理
如何保证服务器通讯安全
淮南视频点播软件开发定制公司
网络安全工程师就业方向及前景
爱读宝期刊数据库
我的世界小型服务器必须有的东西
软件开发设计创始人倪滇
重庆琪惠软件开发有限公司
数据库查询时时间分隔符
企业数据库取名
企业数据库管理系统毕业论文
南开大学张健网络安全
软件开发监理
数据库类技术要求
dnf架设数据库写入错误
湖南网络安全审计硬件设备价位
读取数据库海量数据库
信息技术与大数据库
服务器放在dmz里安全吗
网络安全产品研究院