[869]pandas的dataFrame的行列索引操作

时间:2022-07-22
本文章向大家介绍[869]pandas的dataFrame的行列索引操作,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

pandas的dataFrame的索引值从1开始

假设有一个dataFrame:

这里的index的索引列是从0开始的,那么现在我想要让它从1开始怎么做? 我搜了几篇文章,发现有的是:

df.index = range(len(df))  //这样的
data_df = pd.DataFrame({'a':a,},index=list(range(1,n)))  //这种是创建的时候,不满足我当前的需求
df.reindex(index=list(range(1, df.shape[0])))  //还有这样的,少了一条数据

突然间我就悟出来了,如下所示:

df.index=df.index+1

这样!就好了!

DataFrame中指定位置增加删除一行一列

df=DataFrame(np.arange(16).reshape((4,4)),index=['a','b','c','d'],columns=['one','two','three','four'])  

优雅的增加一行,

df.loc['new_raw'] = '3'

df
Out[84]: 
        one two three four
a         0   1     2    3
b         4   5     6    7
c         8   9    10   11
d        12  13    14   15
new_raw   3   3     3    3

优雅的增加一列

df['new_colu']='12'#向 DataFrame 添加一列,该列为同一值

df
Out[93]: 
        one two three four new_colu
a         0   1     2    3       12
b         4   5     6    7       12
c         8   9    10   11       12
d        12  13    14   15       12
new_raw   3   3     3    3       12
  • 删除一行、一列
>>> df
   A  B  C  D
0  1  3  3  4
1  5  6  7  8
2  1  1  1  1
3  2  3  2  3
 
#删除A列,不改变原来的data数据,返回删除后的新表data_2。axis为1表示删除列,0表示删除行。inplace为True表示直接对原表修改。
 
>>> data_2 = df.drop('A',axis=1,inplace=False)    #删除列
>>> data_2
   B  C  D
0  3  3  4
1  6  7  8
2  1  1  1
3  3  2  3
>>> df.drop(0,axis=0,inplace=False)               #删除行
   A  B  C  D
1  5  6  7  8
2  1  1  1  1
3  2  3  2  3
>>>
  • 指定位置增加行列
>>> df
   A  B  C   D
0  1  3  3   4
1  5  6  7   8
2  1  1  1   1
3  2  3  2   3
4  7  8  9  10
>>> df.insert(0,'E',[11,12,13,14,15])     #插入一列
>>> df
    E  A  B  C   D
0  11  1  3  3   4
1  12  5  6  7   8
2  13  1  1  1   1
3  14  2  3  2   3
4  15  7  8  9  10
>>> df
    E  A  B  C   D
0  11  1  3  3   4
1  12  5  6  7   8
2  13  1  1  1   1
3  14  2  3  2   3
4  15  7  8  9  10
 
df.insert(1,'调换',df.pop('A'))  #改变某一列的位置。如:先删除A列,然后在原表data中第1列插入被删掉的列。
 
>>> df
    E  调换  B  C   D
0  11   1  3  3   4
1  12   5  6  7   8
2  13   1  1  1   1
3  14   2  3  2   3
4  15   7  8  9  10
>>> df                   字典方式添加一行,append,忽略索引
   a  b  c  d
0  1  3  3  4
1  5  6  7  8
>>>
>>>
>>> row={'a':9,'b':10,'c':11,'d':12}
>>> df.append(row,ignore_index=True)
   a   b   c   d
0  1   3   3   4
1  5   6   7   8
2  9  10  11  12
>>>                      用loc指定位置添加一行
>>> df.loc[2]=[9,10,11,12]
>>> df
   a   b   c   d
0  1   3   3   4
1  5   6   7   8
2  9  10  11  12
>>>
  • 指定位置插入一行,索引非数字
>>> df = pd.DataFrame({'A': [0, 1, 2], 'B': [3, 4, 5]},index=['c','d','f'])
>>> df
   A  B
c  0  3
d  1  4
f  2  5
>>> df.loc['c']=['test','test']      ###指定位置插入一行
>>> df
      A     B
c  test  test
d     1     4
f     2     5
  • 按特定顺序,插入一行,保证索引按序排列
>>> df
    E  调换  B  C   D
0  11   1  3  3   4
1  12   5  6  7   8
2  13   1  1  1   1
3  14   2  3  2   3
4  15   7  8  9  10
>>>
>>> df.loc[5]=[9,9,9,9,9]                     #插入一行,按E列的顺序,升序
>>> df
    E  调换  B  C   D
0  11   1  3  3   4
1  12   5  6  7   8
2  13   1  1  1   1
3  14   2  3  2   3
4  15   7  8  9  10
5   9   9  9  9   9
>>> df.sort_values(by='E')                    #按E列排序
    E  调换  B  C   D
5   9   9  9  9   9
0  11   1  3  3   4
1  12   5  6  7   8
2  13   1  1  1   1
3  14   2  3  2   3
4  15   7  8  9  10
>>> df1=df.sort_values(by='E')
>>> df1.reset_index()                        #重置索引
   index   E  调换  B  C   D
0      5   9   9  9  9   9
1      0  11   1  3  3   4
2      1  12   5  6  7   8
3      2  13   1  1  1   1
4      3  14   2  3  2   3
5      4  15   7  8  9  10
>>> df2=df1.reset_index()
>>> del df2['index']
>>> df2                                      #删除掉原来的索引列index
    E  调换  B  C   D
0   9   9  9  9   9
1  11   1  3  3   4
2  12   5  6  7   8
3  13   1  1  1   1
4  14   2  3  2   3
5  15   7  8  9  10
>>>   

pandas中DataFrame修改index、columns名的方法

一般常用的有两个方法: 1、使用DataFrame.index = [newName]DataFrame.columns = [newName],这两种方法可以轻松实现。 2、使用rename方法(推荐):

DataFrame.rename(mapper = None,index = None,columns = None,axis = None,copy = True,inplace = False,level = None )

参数介绍: mapper,index,columns:可以任选其一使用,可以是将index和columns结合使用。index和column直接传入mapper或者字典的形式。

axis:int或str,与mapper配合使用。可以是轴名称(‘index’,‘columns’)或数字(0,1)。默认为’index’。

copy:boolean,默认为True,是否复制基础数据。

inplace:布尔值,默认为False,是否返回新的DataFrame。如果为True,则忽略复制值。

import numpy as np
import pandas as pd
from pandas import Series, DataFrame

df1 = DataFrame(np.arange(9).reshape(3, 3), index = ['bj', 'sh', 'gz'], columns=['a', 'b', 'c'])
print(df1)
'''
    a  b  c
bj  0  1  2
sh  3  4  5
gz  6  7  8
'''

# 修改 df1 的 index
print(df1.index) # 可以打印出print的值,同时也可以为其赋值
df1.index = Series(['beijing', 'shanghai', 'guangzhou'])
print(df1)
'''
           a  b  c
beijing    0  1  2
shanghai   3  4  5
guangzhou  6  7  8
'''

# 可以使用map方法进行映射,map的使用方法就和python中的map几乎一样
print(df1.index.map(str.upper)) # Index(['BEIJING', 'SHANGHAI', 'GUANGZHOU'], dtype='object')

print(df1) # 结果 并未改变, 上面只是返回一个 dataframe 而已
'''
           a  b  c
beijing    0  1  2
shanghai   3  4  5
guangzhou  6  7  8
'''

# 如果 需要 改变的话,可以如下: 另外赋值给一个变量
df1.index = df1.index.map(str.upper)
print(df1) # 这样 就 改变了
'''
           a  b  c
BEIJING    0  1  2
SHANGHAI   3  4  5
GUANGZHOU  6  7  8
'''

# 更快捷的 方法 使用 rename,可以分别为 index 和 column 来指定值
# 使用 map 的方式来赋值
df2 = df1.rename(index=str.lower, columns=str.upper) # 这种方法 照样是产生一个新的 dataframe
print(df2)
''' 可以很轻松的 修改 dataframe 的 index 和 columns
           A  B  C
beijing    0  1  2
shanghai   3  4  5
guangzhou  6  7  8
'''

# 同时,rename 还可以传入字典
df3 = df2.rename(index={'beijing':'bj'}, columns = {'A':'aa'}) # 为某个 index 单独修改名称
print(df3) #
'''
           aa  B  C
bj          0  1  2
shanghai    3  4  5
guangzhou   6  7  8
'''

# 自定义map函数
def test_map(x):
    return x+'_ABC'

print(df1.index.map(test_map))
# 输出 Index(['BEIJING_ABC', 'SHANGHAI_ABC', 'GUANGZHOU_ABC'], dtype='object')

print(df1.rename(index=test_map))
'''
               a  b  c
BEIJING_ABC    0  1  2
SHANGHAI_ABC   3  4  5
GUANGZHOU_ABC  6  7  8
'''

参考:https://blog.csdn.net/OldDirverHelpMe/article/details/104001138 https://blog.csdn.net/luoganttcc/article/details/77570024 https://blog.csdn.net/missyougoon/article/details/83780845 https://blog.csdn.net/ai_1046067944/article/details/81382348