千家信息网

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的基础用法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0