Pandas之DataFrame增删改操作


查询:DataFrame.head可以查询前几行的数据,默认为前五行;DataFrame.tail查看后几行,默认为5行;DataFrame.describe查看全部数据的概要描述。【在前面的章节中已经详解介绍过了】

排序:df.sort_index(axis=,ascending=) axis为0/1的参数,表示按行/按列排序;ascending为boolean参数,False表示降序,True表示升序。df.sort_value(by=,ascending=) by表示按哪一个columns参数排序。

删除列:使用del或者pop(‘columns’)删除pandas DataFrame的某一/几列。需要注意的是该删除的方法都会改变原DataFrame,而不是像其他方法一样内存当中新建一个DataFrame。pop由于弹出特定的列,会返回被弹出的列中的数值。

运算:+、-、*、/、exp以及关系运算等,两个DataFrame运算是一个DataFrame每个位置的值和对应位置另一个DataFrame的值进行运算,因此这里的*不是矩阵相乘(叉乘);在处理矩阵的时候会用到numpy.linalg函数(用来处理矩阵相关运算的函数),在此不赘述。同时除了可以整个Data'frame参与运算以外还可以选取特定的columns参与运算。

DataFrame修改和添加:利用=即可实现修改功能,同时可以在=右边加上赋值的范围,赋值号同样会改变原来DataFrame当中的数值

df.drop():从坐标轴删除一个多或多个条目。drop方法将会返回一个新的对象并从坐标轴中删除指定的一个或多个值,不改变原来的数据

1、排序

对 axis 按照 index 排序(axis=1是指第二个维度,即:列),按照列名称来排序。

import numpy as np
import pandas as pd
dates = pd.date_range('20130101', periods=6)
print(dates)

df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
print('\n',df)

df.sort_index(axis=1, ascending=False)
                D        C           B       A

2013-01-01 -1.135632 -1.509059 -0.282863 0.469112
2013-01-02 -1.044236 0.119209 -0.173215 1.212112
2013-01-03 1.071804 -0.494929 -2.104569 -0.861849
2013-01-04 0.271860 -1.039575 -0.706771 0.721555
2013-01-05 -1.087401 0.276232 0.567020 -0.424972
2013-01-06 0.524988 -1.478427 0.113648 -0.673690

按值排序

df.sort_values(by='B')
                   A         B         C         D
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804
2013-01-04  0.721555 -0.706771 -1.039575  0.271860
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-06 -0.673690  0.113648 -1.478427  0.524988
2013-01-05 -0.424972  0.567020  0.276232 -1.087401

2、删除del或者pop

当删除DataFrame中的一列时,使用:del df['column_name']。

df = pd.DataFrame.from_items([('A', [1, 2, 3]), ('B',[4,5,6])],orient='index', 
columns=['one', 'two', 'three'])
print(df)

del df['two']
print(df)

df.pop('one')
print(df)
#原始的df
      one  two  three
A    1    2      3
B    4    5      6

#删除列two
   one  three
A    1      3
B    4      6

#pop出one,剩下的df
   three
A      3
B      6

3、运算

df = pd.DataFrame.from_items([('A', [1, 2, 3]), ('B',[4,5,6])],orient='index', 
columns=['one', 'two', 'three'])
df['three'] = df['one'] * df['two']
print(df)
  one  two  three
A    1    2      2
B    4    5     20

4、DataFrame修改和添加

df = pd.DataFrame.from_items([('A', [1, 2, 3]), ('B',[4,5,6])],orient='index', 
columns=['one', 'two', 'three'])

df['fore'] = 1    
df
       one  two  three  fore    
  A    1    2      3     1    
  B    4    5      6     1
df['five'] = df['one'][:1]
df
       one  two  three  fore  five                    
  A    1    2      3     1   1.0
  B    4    5      6     1   NaN

添加新的列 首先肯定是重新创建一个新的DataFrame;其二就是上述的赋值做法,给原来DataFrame当中的新列进行赋值,如上面df[‘five’]的例子;其三就是通过insert(loc, column, value, allow_duplicates=False)方法进行,

insert同样会改变DataFrame数据,例如:

df.insert(1, 'bar', df['one'])
df
        one   bar     two  three  fore five
   A    1    1        2      3     1    1.0
   B    4    4        5      6     1    NaN

另外可以通过DataFrame.assign对表格进行改动,该方法会返回改动后的DataFrame,但不是改动原来的DataFrame。

df.assign(ration = df['one'] / df['one'])
输出:one  two  three  fore  five  ration
A    1    2      3     1   1.0     1.0
B    4    5      6     1   NaN     1.0
df
输出:one  two  three  fore  five
A    1    2      3     1   1.0
B    4    5      6     1   NaN

当然使用loc、iloc等都可以添加新列,这个就不赘述了。

5、drop函数

删除表中的某一行或者某一列更明智的方法是使用drop,它不改变原有的df中的数据,而是返回另一个dataframe来存放删除后的数据。

(1)drop函数的使用:删除行、删除列
pop = {'Nevada': {'a': 2.4,'b': 2.9},'Ohio': {'a': 1.5, 'b': 1.7, 'c': 3.6}}
frame = pd.DataFrame(pop)
print(frame)

print('\n',frame.drop(['a']))
print('\n',frame.drop(['Ohio'], axis = 1))

   Nevada  Ohio
a     2.4   1.5
b     2.9   1.7
c     NaN   3.6

    Nevada  Ohio
b     2.9   1.7
c     NaN   3.6

    Nevada
a     2.4
b     2.9
c     NaN

drop函数默认删除行,列需要加axis = 1

(2)drop函数的使用:inplace参数

采用drop方法,有下面三种等价的表达式:

1.DF= DF.drop('column_name', axis=1);

2.DF.drop('column_name',axis=1, inplace=True)

3.DF.drop([DF.columns[[0,1, 3]]], axis=1, inplace=True)   # Note: zero indexed

注意:凡是会对原数组作出修改并返回一个新数组的,往往都有一个 inplace可选参数。如果手动设定为True(默认为False),那么原数组直接就被替换。也就是说,采用inplace=True之后,原数组名(如2和3情况所示)对应的内存值直接改变;

而采用inplace=False之后,原数组名对应的内存值并不改变,需要将新的结果赋给一个新的数组或者覆盖原数组的内存位置(如1情况所示)。

results matching ""

    No results matching ""