Pandas - DataFrame 基本操作

上一节我们学习了 Series 结构的增删改查基本操作,本节掌握 DataFrame 的增删改查将变得非常轻松~

首先,我们来构造一个 DataFrame

data = [[1,2,3], [4,5,6], [7,8,9]]
index = ['a', 'b', 'c']
columns = ['A', 'B', 'C']
df = pd.DataFrame(data=data, index=index, columns=columns)
df

查询指定列:

>> df['A']
a    1
b    4
c    7
Name: A, dtype: int64
>> df[['A','C']]
    A   C
a   1   3
b   4   6
c   7   9

使用 lociloc 查询指定行:

>> df.loc['a']
A    1
B    2
C    3
Name: a, dtype: int64
>> df.iloc[0]
A    1
B    2
C    3
Name: a, dtype: int64
>> df.loc['a':'b']
    A   B   C
a   1   2   3
b   4   5   6
>> df.iloc[:2]
    A   B   C
a   1   2   3
b   4   5   6

此外,ilocloc 还可以接收一个坐标,查询 DataFrame 的指定值或区域:

>> df.loc['b','B']
5
>> df.loc['a':'b',['A','C']]
    A   C
a   1   3
b   4   6

最后,还有经常使用的布尔索引:

>> df[[True, False, True]]
    A   B   C
a   1   2   3
c   7   8   9

修改指定值:

>> df.loc['a', 'A']
1
>> df.loc['a', 'A'] = 1000
>> df

修改索引和列名:

>> df.index = ['aa','bb','cc']
>> df.columns = ['AA','BB','CC']
>> df

增加一行内容:

>> df.loc['dd'] = [0,0,0]
>> df

增加多行内容(纵向拼接两个 DataFrame),首先构造一个新的 DataFrame df2

>> df2 = pd.DataFrame(data=[[10,10,10], [100, 100, 100]], 
                      index=['dd', 'ee'], 
                      columns=['AA', 'BB', 'CC'])
>> df2

拼接两个 DataFrame:

>> df3 = pd.concat([df, df2])
>> df3

pd.concat 只做简单的拼接,即便是索引重复也不会覆盖:

>> df3.loc['dd']
    AA  BB  CC
dd  0   0   0
dd  10  10  10

通常,我们会使用 ignore_index=True 来重新生产数字索引:

>> df3 = pd.concat([df, df2], ignore_index=True)
>> df3

df2 增加一列 DD

>> df2['DD'] = [1000, 1000]
>> df2

如果是增加多列呢?同样的我们还是使用 pd.concat ,不过要将参数设置为 axis=1。下面我们先构造一个两行两列的 DataFrame df4

>> df4 = pd.DataFrame([[1,2],[3,4]], index=['dd','ee'], columns=['E','F'])
>> df4
    E   F
dd  1   2
ee  3   4

拼接 df2df4

>> df5 = pd.concat([df2,df4], axis=1)
>> df5

删除上述 df5 中的 E 列和 F 列:

>> del df5['E']
>> del df5['F']
>> df5

删除多列时,也可以使用 drop 方法,不过要指定 axis=1

>> df5.drop(['CC','DD'], axis=1, inplace=True)
>> df5

也可以使用 drop 方法删除多行,删除行时使用默认参数 axis=0 即可:

>> df5.drop(['dd'], inplace=True)
>> df5

你可能感兴趣的:(Pandas - DataFrame 基本操作)