Pandas.DataFrame重置列的行名实现(set_index)

目录
  • set_index()的使用方法
    • 基本用法
    • 将指定的列保留为数据:参数drop
    • 分配多索引
  • 将索引更改为另一列(重置)
    • 更改原始对象:参数inplace
  • 读取csv文件等时指定索引
  • 使用索引(行名)提取(选择)行和元素

pandas.DataFrame中的现有列分配给索引index(行名,行标签)。为索引指定唯一的名称很方便,因为使用loc,at选择(提取)元素时很容易理解。

将描述以下内容。

set_index()的使用方法

  • 基本用法
  • 将指定的列保留为数据:参数drop
  • 分配多索引
  • 将索引更改为另一列(重置)
  • 更改原始对象:参数inplace

读取csv文件等时指定索引

使用索引(行名)提取(选择)行和元素

了解如何更改索引的一部分或将整个列表替换为列表等,而不是将现有列分配给索引。

请参考以下文章,

Pandas.DataFrame的行名和列名的修改

以下面的数据为例。

import pandas as pd

df = pd.read_csv('./data/22/sample_pandas_normal.csv')
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

set_index()的使用方法

基本用法

在第一个参数键中指定用作索引的列的列名(列标签)。指定的列设置为索引。

df_i = df.set_index('name')
print(df_i)
#          age state  point
# name
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

将指定的列保留为数据:参数drop

默认情况下,如上例所示,从数据列中删除指定的列。如果参数drop = False,则指定的列将设置为index,并且也将保留在data列中。

df_id = df.set_index('name', drop=False)
print(df_id)
#             name  age state  point
# name
# Alice      Alice   24    NY     64
# Bob          Bob   42    CA     92
# Charlie  Charlie   18    CA     70
# Dave        Dave   68    TX     70
# Ellen      Ellen   24    CA     88
# Frank      Frank   30    NY     57

分配多索引

如果在第一个参数键中指定了列名列表(列标签),则将多列分配为多索引。

df_mi = df.set_index(['state', 'name'])
print(df_mi)
#                age  point
# state name
# NY    Alice     24     64
# CA    Bob       42     92
#       Charlie   18     70
# TX    Dave      68     70
# CA    Ellen     24     88
# NY    Frank     30     57

使用sort_index()排序时,它可以整齐显示。

df_mi.sort_index(inplace=True)
print(df_mi)
#                age  point
# state name
# CA    Bob       42     92
#       Charlie   18     70
#       Ellen     24     88
# NY    Alice     24     64
#       Frank     30     57
# TX    Dave      68     70

使用sort_values()对行进行排序以进行说明。有关排序的详细信息,请参见以下文章。

pandas.DataFrame,Series排序(sort_values,sort_index)

默认情况下,如果在set_index()中指定一列,则原始索引将被删除。

print(df_i)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

df_ii = df_i.set_index('state')
print(df_ii)
#        age  point
# state            
# NY      24     64
# CA      42     92
# CA      18     70
# TX      68     70
# CA      24     88
# NY      30     57

如果将参数append设置为True,则除了原始索引之外,还将将指定的列添加为新的层次结构索引。

df_mi = df_i.set_index('state', append=True)
print(df_mi)
#                age  point
# name    state
# Alice   NY      24     64
# Bob     CA      42     92
# Charlie CA      18     70
# Dave    TX      68     70
# Ellen   CA      24     88
# Frank   NY      30     57

添加的列是最底层。使用swaplevel()切换图层。

print(df_mi.swaplevel(0, 1))
#                age  point
# state name
# NY    Alice     24     64
# CA    Bob       42     92
#       Charlie   18     70
# TX    Dave      68     70
# CA    Ellen     24     88
# NY    Frank     30     57

将索引更改为另一列(重置)

与前面的示例一样,如果使用set_index()指定列,则原始索引将被删除。

如果要保留原始索引,请使用reset_index(),它会从0开始按顺序对索引重新编号。

print(df_i)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

df_ri = df_i.reset_index()
print(df_ri)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

如果要将索引更改(重置)到另一列,请在reset_index()之后使用set_index()。如果一次性全部编写,将如下所示。

df_change = df_i.reset_index().set_index('state')
print(df_change)
#           name  age  point
# state
# NY       Alice   24     64
# CA         Bob   42     92
# CA     Charlie   18     70
# TX        Dave   68     70
# CA       Ellen   24     88
# NY       Frank   30     57

请注意,为方便起见,在此示例中将具有重叠值的列设置为索引,但是如果索引值不重叠(每个值都是唯一的),则更容易选择数据。

另请参见以下有关reset_index()的文章。

Pandas.DataFrame,重置Series的索引index(reset_index)

更改原始对象:参数inplace

默认情况下,set_index()不会更改原始对象并返回新对象,但是如果inplace参数为True,则原始对象将被更改。

df.set_index('name', inplace=True)
print(df)
#          age state  point
# name
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

读取csv文件等时指定索引

从csv文件等中读取并生成pandas.DataFrame或pandas.Series时,如果原始文件包含要用作索引的列,则可以在读取时指定该列。

使用read_csv()读取文件时,在参数index_col中指定一个列号,该列即成为索引。

df = pd.read_csv('./data/22/sample_pandas_normal.csv', index_col=0)
print(df)
#          age state  point
# name
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

有关读取csv和tsv文件的详细信息,请参见以下文章。

Pandas读取csv/tsv文件(read_csv,read_table)

使用索引(行名)提取(选择)行和元素

与前面的示例一样,如果在索引(行名,行标签)中指定唯一的字符串,则可以按名称提取(选择)行或元素。

print(df)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

print(df.loc['Bob'])
# age      42
# state    CA
# point    92
# Name: Bob, dtype: object

print(df.at['Bob', 'age'])
# 42

有关loc和at的信息,请参见以下文章。

Pandas获取和修改任意位置的值(at,iat,loc,iloc)

到此这篇关于Pandas.DataFrame重置列的行名实现(set_index)的文章就介绍到这了,更多相关Pandas.DataFrame重置列的行名内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python Pandas 获取列匹配特定值的行的索引问题

    给定一个带有列"BoolCol"的DataFrame,如何找到满足条件"BoolCol" == True的DataFrame的索引 目前有迭代的方式来做到这一点: for i in range(100,3000): if df.iloc[i]['BoolCol']== True: print i,df.iloc[i]['BoolCol'] 这虽然可行,但不是标准的 Pandas 方式.经过一番研究,我目前正在使用这个代码: df[df['BoolCol'] == T

  • Pandas通过index选择并获取行和列

    目录 获取pandas.DataFrame的列 列名称:将单个列作为pandas.Series获得 列名称的列表:将单个或多个列作为pandas.DataFrame获得 获取pandas.DataFrame的行 行名・行号的切片:将单行或多行作为pandas.DataFrame获得 获取pandas.Series的值 标签名称:获取每种类型的单个元素的值 标签名称/数字切片:将单个元素或多个元素的值作为pandas.Series获得 获取pandas.DataFrame元素的值 行名/列名是整数

  • pandas行和列的获取的实现

    目录 1. 行和列的获取 1.1 根据索引获取行 1.2 根据条件获取行 1.3 获取列 2. 区域选取 2.1 df.loc[] 2.2 df.iloc[ ] 2.3 df.ix[ ] 3. 单元格选取 3.1 df.at[] 3.2 df.iat[] DataFrame的行和列:df[‘行’, ‘列’] DataFrame行和列的获取分三个维度 行和列选取:df[],一次只能选取行或列 区域选取:df.loc[], df.iloc[], df.ix[],可以同时为行或列设置筛选条件 单元格选

  • pandas DataFrame 行列索引及值的获取的方法

    pandas DataFrame是二维的,所以,它既有列索引,又有行索引 上一篇里只介绍了列索引: import pandas as pd df = pd.DataFrame({'A': [0, 1, 2], 'B': [3, 4, 5]}) print df # 结果: A B 0 0 3 1 1 4 2 2 5 行索引自动生成了 0,1,2 如果要自己指定行索引和列索引,可以使用 index 和 column 参数: 这个数据是5个车站10天内的客流数据: ridership_df = pd

  • python pandas获取csv指定行 列的操作方法

    pandas获取csv指定行,列 house_info = pd.read_csv('house_info.csv') 1:取行的操作: house_info.loc[3:6]类似于python的切片操作 2:取列操作: house_info['price']  这是读取csv文件时默认的第一行索引 3:取两列 house_info[['price',tradetypename']] 取多个列也是同理的,注意里面是一个list的列表,不然会报错误: 4:增加列: house_Info['adre

  • Pandas.DataFrame重置列的行名实现(set_index)

    目录 set_index()的使用方法 基本用法 将指定的列保留为数据:参数drop 分配多索引 将索引更改为另一列(重置) 更改原始对象:参数inplace 读取csv文件等时指定索引 使用索引(行名)提取(选择)行和元素 pandas.DataFrame中的现有列分配给索引index(行名,行标签).为索引指定唯一的名称很方便,因为使用loc,at选择(提取)元素时很容易理解. 将描述以下内容. set_index()的使用方法 基本用法 将指定的列保留为数据:参数drop 分配多索引 将索

  • python pandas dataframe 按列或者按行合并的方法

    concat 与其说是连接,更准确的说是拼接.就是把两个表直接合在一起.于是有一个突出的问题,是横向拼接还是纵向拼接,所以concat 函数的关键参数是axis . 函数的具体参数是: concat(objs,axis=0,join='outer',join_axes=None,ignore_index=False,keys=None,levels=None,names=None,verigy_integrity=False) objs 是需要拼接的对象集合,一般为列表或者字典 axis=0 是

  • Pandas.DataFrame重置Series的索引index(reset_index)

    目录 使用reset_index()将索引重新分配给序列号 基本用法 删除原始索引:参数drop 更改原始对象:参数inplace 使用reset_index()和set_index()将索引更改为另一列(重置) 如果使用reset_index()方法,则可以将pandas.DataFrame,pandas.Series的索引索引(行名称,行标签)重新分配为从0开始的序列号(行号). 如果将行号用作索引,则通过排序更改行的顺序或删除行并得到缺少的号码时,重新索引会更容易. 当行名(行标签)用作索

  • pandas.DataFrame选取/排除特定行的方法

    pandas.DataFrame选取特定行 使用Python进行数据分析时,经常要使用到的一个数据结构就是pandas的DataFrame,如果我们想要像Excel的筛选那样,只要其中的一行或某几行,可以使用isin()方法,将需要的行的值以列表方式传入,还可以传入字典,指定列进行筛选. >>> df = pd.DataFrame([['GD', 'GX', 'FJ'], ['SD', 'SX', 'BJ'], ['HN', 'HB', 'AH'], ['HEN', 'HEN', 'HL

  • 在Python中pandas.DataFrame重置索引名称的实例

    例子: 创建DataFrame ### 导入模块 import numpy as np import pandas as pd import matplotlib.pyplot as plt test = pd.DataFrame({'a':[11,22,33],'b':[44,55,66]}) """ a b 0 11 44 1 22 55 2 33 66 """ 更改列名方法一:rename test.rename(columns={'a':

  • 利用Pandas读取某列某行数据之loc和iloc用法总结

    目录 1.loc方法 2.iloc方法 补充:利用loc.iloc提取所有数据 总结 实际操作中我们经常需要寻找数据的某行或者某列,这里介绍我在使用Pandas时用到的两种方法:iloc和loc. loc:通过行.列的名称或标签来索引 iloc:通过行.列的索引位置来寻找数据 首先,我们先创建一个Dataframe,生成数据,用于下面的演示 import pandas as pd import numpy as np # 生成DataFrame data = pd.DataFrame(np.ar

  • Python pandas.DataFrame调整列顺序及修改index名的方法

    1. 从字典创建DataFrame >>> import pandas >>> dict_a = {'user_id':['webbang','webbang','webbang'],'book_id':['3713327','4074636','26873486'],'rating':['4','4','4'],'mark_date':['2017-03-07','2017-03-07','2017-03-07']} >>> df = pandas.

  • pandas DataFrame 删除重复的行的实现方法

    1. 建立一个DataFrame C=pd.DataFrame({'a':['dog']*3+['fish']*3+['dog'],'b':[10,10,12,12,14,14,10]}) 2. 判断是否有重复项 用duplicated( )函数判断 C.duplicated() 3.  有重复项,则可以用drop_duplicates()移除重复项 C.drop_duplicates() 4. Duplicated( )和drop_duplicates( )方法是以默认的方式判断全部的列(上面

  • Pandas.DataFrame时间序列数据处理的实现

    目录 如何将一列现有数据指定为DatetimeIndex 读取CSV时如何指定DatetimeIndex 关于pandas.Series 将pandas.DataFrame,pandas.Series的索引设置为datetime64 [ns]类型时,将其视为DatetimeIndex,并且可以使用各种处理时间序列数据的函数. 可以按年或月指定行,并按切片指定提取周期,这在处理包含日期和时间信息(例如日期和时间)的数据时非常方便. 在此,将对以下内容进行描述. 如何将一列现有数据指定为Dateti

  • Pandas.DataFrame的行名和列名的修改

    目录 DataFrame.rename() 多个行名和列名的修改 原DataFrame的修改(参数inplace) 使用lambda表达式和函数进行批处理 add_prefix(), add_suffix() index和columns元素的更新 pandas.DataFrame行名(index)和列名(columns)的修改方法如下. rename() 任意的行名(index)和列名(columns)的修改 add_prefix(), add_suffix() 列名的接头词和结尾词的追加 in

随机推荐