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情况所示)。