pandas的基础用法
本篇内容介绍了“pandas的基础用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联专业为企业提供新晃网站建设、新晃做网站、新晃网站设计、新晃网站制作等企业网站建设、网页设计与制作、新晃企业网站模板建站服务,10多年新晃做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
创建pandas
1. 使用pd.Series()函数创建DataFrame
import pandas as pd country1 = 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表示丢弃之前的index df.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: Series df[['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 np df = 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 pd staff_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.columns data.index
重命名columns
df.rename(columns={'Region': '地区', 'Happiness Rank': '排名', 'Happiness Score': '幸福指数'}, inplace=True)
数据清洗操作
# null替换成0 df.fillna(0, inplace=False) # 丢弃null df.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_group grouped = report_data2.groupby(get_rank_group) for group, frame in grouped: print('{}分组的数据个数:{}'.format(group, len(frame)))
# 实际项目中,通常可以先人为构造出一个分组列,然后再进行groupby # 按照score的整数部分进行分组 # 按照幸福指数排名进行划分,1-10, 10-20, >20 # 如果自定义函数,操作针对的是index report_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的基础用法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
网站标题:pandas的基础用法
标题URL:http://scyanting.com/article/ggisio.html