文章目录
- pandas的dataFrame的索引值从1开始
- DataFrame中指定位置增加删除一行一列
- pandas中DataFrame修改index、columns名的方法
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
'''