数据分析与科学计算可视化

一、iloc和loc的区别

1.1
原文来自此,如要查看,请点击。
pandas以类似字典的方式来获取某一列的值,比如df[‘A’],这会得到df的A列,返回的也是一个Series对象。如果想要获取部分行的话就得用到切片

例如:df’[:3],获取前三行;df[3:4],获取第四行。但是如果想要获取部分行部分列的上述两种方法就无能为力了。这时就得用到 ix, loc, iloc方法(ix已弃用)loc是指location的意思,iloc中的i是指integer。iloc和loc方式索引也更为精细。这两者的区别如下:

  • loc works on labels in the index.(说白了就是标签索引)
  • iloc works on the positions in the index (so it only takes integers). (位置索引,和列表索引类似,里面只能是数字)在这里插入图片描述
    ————————————————
    版权声明:本文为CSDN博主「Mr-Joe」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qiao8756/article/details/80843440
    1.2

loc函数:通过行索引 “Index” 中的具体值来取行数据(如取"Index"为"A"的行)
iloc函数:通过行号来取行数据(如取第二行的数据)

本文给出loc、iloc常见的五种用法,并附上详细代码。

1.利用loc、iloc提取行数据

import numpy as np
import pandas as pd
#创建一个Dataframe
data=pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('ABCD'))
 
In[1]: data
Out[1]: 
    A   B   C   D
a   0   1   2   3
b   4   5   6   7
c   8   9  10  11
d  12  13  14  15
 
#取索引为'a'的行
In[2]: data.loc['a']
Out[2]:
A    0
B    1
C    2
D    3
 
#取第一行数据,索引为'a'的行就是第一行,所以结果相同
In[3]: data.iloc[0]
Out[3]:
A    0
B    1
C    2
D    3

2. 利用loc、iloc提取列数据

In[4]:data.loc[:,['A']] #取'A'列所有行,多取几列格式为 data.loc[:,['A','B']]
Out[4]: 
    A
a   0
b   4
c   8
d  12
 
In[5]:data.iloc[:,[0]] #取第0列所有行,多取几列格式为 data.iloc[:,[0,1]]
Out[5]: 
    A
a   0
b   4
c   8
d  12

3.利用loc、iloc提取指定行、指定列数据

In[6]:data.loc[['a','b'],['A','B']] #提取index为'a','b',列名为'A','B'中的数据
Out[6]: 
   A  B
a  0  1
b  4  5
 
In[7]:data.iloc[[0,1],[0,1]] #提取第0、1行,第0、1列中的数据
Out[7]: 
   A  B
a  0  1
b  4  5
4.利用loc、iloc提取所有数据
In[8]:data.loc[:,:] #取A,B,C,D列的所有行
Out[8]: 
    A   B   C   D
a   0   1   2   3
b   4   5   6   7
c   8   9  10  11
d  12  13  14  15
 
In[9]:data.iloc[:,:] #取第0,1,2,3列的所有行
Out[9]: 
    A   B   C   D
a   0   1   2   3
b   4   5   6   7
c   8   9  10  11
d  12  13  14  15

5.利用loc函数,根据某个数据来提取数据所在的行

In[10]: data.loc[data['A']==0] #提取data数据(筛选条件: A列中数字为0所在的行数据)
Out[10]: 
   A  B  C  D
a  0  1  2  3

利用loc函数的时候,当index相同时,会将相同的Index全部提取出来,优点是:如果index是人名,数据框为所有人的数据,那么我可以将某个人的多条数据提取出来分析;缺点是:如果index不具有特定意义,而且重复,那么提取的数据需要进一步处理。
————————————————
作者:云爬虫技术研究笔记
链接:https://www.jianshu.com/p/dadf2f1b88fc
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

二、matplotlib绘制f(x)=sin2(x-2)e(-x^2)

原文来自此,如要查看,请点击。
绘制图形要求:
在x的取值范围[0, 2]之间绘制函数:

绘制5副图
在这里插入图片描述

```python
'''
plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)
说明:设定网格,选中网格,确定选中行列区域数量,编号从0开始
plt.subplot2grid((3,3),(1,0),colspan=2)

plt.annotate(s, xy=arrow_crd, xytext=text_crd, arrowprops=dict)
'''
x=np.linspace(0,2,30)
y=np.power(np.sin(x-2),2)*np.power(np.e,-1*np.power(x,2))

plt.figure(figsize=(16,16))

ax1=plt.subplot2grid((3,3),(0,0),colspan=3)
ax1.plot(x,y)
ax1.set_title(r'函数示意图$y=f(x)=sin^2(x-2)e^{-x^2}$')
ax1.set_xlabel("x")
ax1.set_ylabel("y")
ax1.axis([0,2,0,1]) #设置坐标范围 x y轴
ax1.grid(True)  #设置网格线

ax2=plt.subplot2grid((3,3),(1,0),colspan=2)
ax2.plot(x,y,'r*')
ax2.set_title(r'函数示意图$y=f(x)=sin^2(x-2)e^{-x^2}$')
ax2.set_xlabel("x")
ax2.set_ylabel("y")
ax2.axis([0,2,0,1]) #设置坐标范围 x y轴
ax2.grid(True)  #设置网格线

ax3=plt.subplot2grid((3,3),(1,2),rowspan=2)
ax3.plot(x,y,'m-.o')
ax3.set_title(r'函数示意图$y=f(x)=sin^2(x-2)e^{-x^2}$')
ax3.set_xlabel("x")
ax3.set_ylabel("y")
ax3.axis([0,2,0,1]) #设置坐标范围 x y轴
ax3.grid(True)  #设置网格线

ax4=plt.subplot2grid((3,3),(2,0),rowspan=1)
ax4.plot(x,y,'g',label="注意legend出现")
ax4.set_title(r'函数示意图$y=f(x)=sin^2(x-2)e^{-x^2}$')
ax4.set_xlabel("x")
ax4.set_ylabel("y")
ax4.legend(loc="upper right")#设置图例位置
ax4.axis([0,2,0,1]) #设置坐标范围 x y轴
ax4.grid(True)  #设置网格线

ax5=plt.subplot2grid((3,3),(2,1),rowspan=1)
ax5.plot(x,y)
ax5.set_title(r'函数示意图$y=f(x)=sin^2(x-2)e^{-x^2}$')
ax5.set_xlabel("x")
ax5.set_ylabel("y")
ax5.annotate(r'注意箭头',xy=(0.8,0.5),xytext=(1.1,0.7),
             arrowprops=dict(facecolor='black',shrink=0.1,width=5))#设置箭头
ax5.axis([0,2,0,1]) #设置坐标范围 x y轴
ax5.grid(True)  #设置网格线

plt.show()
plt.rcParams['axes.unicode_minus']=False     # 正常显示负号

解决负号无法显示:
plt.rcParams['axes.unicode_minus']=False     # 正常显示负号
————————————————
版权声明:本文为CSDN博主「Tris’s」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_41304382/article/details/105011224`在这里插入代码片`

三、 pandas中的isin函数详解

今天有个同学问到一个逻辑,就是not in的逻辑,想用SQL的select c_xxx_s from t1 left join t2 on t1.key=t2.key where t2.key is NULL在Python中的逻辑来实现,实现了left join了(直接用join方法),但是不知道怎么实现where key is NULL。

其实实现not in的逻辑,不用那么复杂,直接用isin函数再取反即可,下面就是isin函数的详解。

import pandas;
df = pandas.DataFrame({
'A': [1, 2, 3], 
'B': ['a', 'b', 'f']
})    
#如果是一个序列或者数组,
#那么判断该位置的值,是否在整个序列或者数组中
df.isin(
[1, 3, 12, 'a']
)    
   A      B
0   True   True
1  False  False
2   True  False    

df = pandas.DataFrame({
'A': [1, 2, 3], 
'B': [1, 4, 7]
})
#如果是一个dirt,
#那么就会首先判断对应的index是否存在,
#如果存在,那么就会判断对应的位置,在该列是否存在
df.isin({
'A': [1, 3], 
'B': [4, 7, 12]
})
   A      B
0   True  False
1  False   True
2   True   True
#如果不存在,那么全部为False,例如B列没有,那么全部为False
df.isin({
'A': [1, 3], 
'C': [4, 7, 12]
})
   A      B
0   True  False
1  False  False
2   True  False
df = pandas.DataFrame({
'A': [1, 2, 3], 
'B': ['a', 'b', 'f']
})
other = pandas.DataFrame({
'A': [1, 3, 3, 2], 
'B': ['e', 'f', 'f', 'e']
})
#如果是一个DataFrame,
#首先就是列名要存在,
#并且需要df中行列位置和B对应的行列位置一一匹配,才返回TRUE
df.isin(other)
   A      B
0   True  False
1  False  False
2   True   True
other = pandas.DataFrame({
'C': [1, 3, 3, 2], 
'D': ['e', 'f', 'f', 'e']
})
#因为AB列皆不在,因此都为False
df.isin(other)
   A      B
0  False  False
1  False  False
2  False  False

————————————————
版权声明:本文为CSDN博主「大数据分析实战」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_28219759/article/details/49160073

四、Python中的lambda和apply用法

1. lambda
lambda原型为:lambda 参数:操作(参数)

lambda函数也叫匿名函数,即没有具体名称的函数,它允许快速定义单行函数,可以用在任何需要函数的地方。这区别于def定义的函数。

lambda与def的区别:

1)def创建的方法是有名称的,而lambda没有。

2)lambda会返回一个函数对象,但这个对象不会赋给一个标识符,而def则会把函数对象赋值给一个变量(函数名)。

3)lambda只是一个表达式,而def则是一个语句。

4)lambda表达式” : “后面,只能有一个表达式,def则可以有多个。

5)像if或for或print等语句不能用于lambda中,def可以。

6)lambda一般用来定义简单的函数,而def可以定义复杂的函数。

1.1 举最简单的例子

#单个参数的:
g = lambda x : x ** 2
print g(3)
"""
9
"""
#多个参数的:
g = lambda x, y, z : (x + y) ** z
print g(1,2,2)
"""
9
"""

1.2 再举一个普通的例子
将一个 list 里的每个元素都平方:

map( lambda x: x*x, [y for y in range(10)] )

这个写法要好过

def sq(x):
    return x * x
map(sq, [y for y in range(10)])

因为后者多定义了一个(污染环境的)函数,尤其如果这个函数只会使用一次的话。

进一步讲,匿名函数本质上就是一个函数,它所抽象出来的东西是一组运算。这是什么意思呢?类比

a = [1, 2, 3]
和
f = lambda x : x + 1

我们会发现,等号右边的东西完全可以脱离等号左边的东西而存在,等号左边的名字只是右边之实体的标识符。如果能习惯 [1, 2, 3] 单独存在,那么 lambda x : x + 1 也能单独存在其实也就不难理解了,它的意义就是给「某个数加一」这一运算本身。

现在回头来看 map() 函数,它可以将一个函数映射到一个可枚举类型上面。沿用上面给出的 a 和 f,可以写

map(f, a)

也就是将函数 f 依次套用在 a 的每一个元素上面,获得结果 [2, 3, 4]。现在用 lambda 表达式来替换 f,就变成:

map( lambda x : x + 1, [1, 2, 3] )

会不会觉得现在很一目了然了?尤其是类比

a = [1, 2, 3]
r = []
for each in a:
    r.append(each+1)

2. Apply
Python中apply函数的格式为:apply(func,*args,**kwargs)

当然,func可以是匿名函数。

用途:当一个函数的参数存在于一个元组或者一个字典中时,用来间接的调用这个函数,并将元组或者字典中的参数按照顺序传递给参数

解析:args是一个包含按照函数所需参数传递的位置参数的一个元组,简单来说,假如A函数的函数位置为 A(a=1,b=2),那么这个元组中就必须严格按照这个参数的位置顺序进行传递(a=3,b=4),而不能是(b=4,a=3)这样的顺序。kwargs是一个包含关键字参数的字典,而其中args如果不传递,kwargs需要传递,则必须在args的位置留空。

apply的返回值就是函数func函数的返回值。

2.1 举例

   def function(a,b):  
        print(a,b)  
    apply(function,('good','better'))  
    apply(function,(2,3+6))  
    apply(function,('cai','quan'))  
    apply(function,('cai',),{'b':'caiquan'})  
    apply(function,(),{'a':'caiquan','b':'Tom'})  
输出结果:

('good', 'better')
(2, 9)
('cai', 'quan')
('cai', 'caiquan')
('caiquan', 'Tom')

有时候,函数的参数可能是DataFrame中的行或者列。

2.2 下面的例子是DataFrame中apply的用法

#函数应用和映射
import numpy as np
import pandas as pd
df=pd.DataFrame(np.random.randn(4,3),columns=list('bde'),index=['utah','ohio','texas','oregon'])
print(df)
"""
               b         d         e
utah   -0.667969  1.974801  0.738890
ohio   -0.896774 -0.790914  0.474183
texas   0.043476  0.890176 -0.662676
oregon  0.701109 -2.238288 -0.154442
"""
 
#将函数应用到由各列或行形成的一维数组上。DataFrame的apply方法可以实现此功能
f=lambda x:x.max()-x.min()
#默认情况下会以列为单位,分别对列应用函数
t1=df.apply(f)
print(t1)
t2=df.apply(f,axis=1)
print(t2)
 
"""
b    1.597883
d    4.213089
e    1.401566
dtype: float64
utah      2.642770
ohio      1.370957
texas     1.552852
oregon    2.939397
dtype: float64
"""
 
#除标量外,传递给apply的函数还可以返回由多个值组成的Series
def f(x):
    return pd.Series([x.min(),x.max()],index=['min','max'])
t3=df.apply(f)
#从运行的结果可以看出,按列调用的顺序,调用函数运行的结果在右边依次追加
print(t3)
 
"""
            b         d         e
min -0.896774 -2.238288 -0.662676
max  0.701109  1.974801  0.738890
"""
 
#元素级的python函数,将函数应用到每一个元素
#将DataFrame中的各个浮点值保留两位小数
f=lambda x: '%.2f'%x
t3=df.applymap(f)
print(t3)
"""
            b      d      e
utah    -0.67   1.97   0.74
ohio    -0.90  -0.79   0.47
texas    0.04   0.89  -0.66
oregon   0.70  -2.24  -0.15
"""
 
#注意,之所以这里用map,是因为Series有一个元素级函数的map方法。而dataframe只有applymap。
t4=df['e'].map(f)
print(t4)
 
"""
utah     0.74
ohio     0.47
texas   -0.66
oregon  -0.15
"""

————————————————
版权声明:本文为CSDN博主「anshuai_aw1」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/anshuai_aw1/article/details/82347016

五、iterrows(), iteritems(), itertuples()对dataframe进行遍历

  • iterrows(): 将DataFrame迭代为(insex, Series)对。
  • itertuples(): 将DataFrame迭代为元祖。
  • iteritems(): 将DataFrame迭代为(列名, Series)对

现有如下DataFrame数据:

import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11, 'c2':110}, {'c1':12, 'c2':123}]
df = pd.DataFrame(inp)
print(df)

在这里插入图片描述
iterrows():

for date, row in df.iterrows():
    print(date)

在这里插入图片描述

for date, row in df.iterrows():
    print(row)

在这里插入图片描述

对于每一行,通过列名访问对应的元素

for date, row in df.iterrows():
    print(row['c1'], row['c2'])

在这里插入图片描述
iteritems():

for date, row in df.iteritems():
    print(date)

在这里插入图片描述

for date, row in df.iteritems():
    print(row)

在这里插入图片描述

for date, row in df.iteritems():
    print(row[0], row[1], row[2])

在这里插入图片描述
itertuples():

for row in df.itertuples():
  print(row)

在这里插入图片描述

for row in df.itertuples():
    print(getattr(row, 'c1'), getattr(row, 'c2'))

在这里插入图片描述

六、pandas之分组groupby()的使用整理与总结

前言
在使用pandas的时候,有些场景需要对数据内部进行分组处理,如一组全校学生成绩的数据,我们想通过班级进行分组,或者再对班级分组后的性别进行分组来进行分析,这时通过pandas下的groupby()函数就可以解决。在使用pandas进行数据分析时,groupby()函数将会是一个数据分析辅助的利器。
groupby的作用可以参考 超好用的 pandas 之 groupby 中作者的插图进行直观的理解:
在这里插入图片描述

准备
读入的数据是一段学生信息的数据,下面将以这个数据为例进行整理grouby()函数的使用:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv('./data.csv')
print(df)
      Name  Gender  Age  Score
0     Alen    Male   18     80
1      Bob    Male   19     90
2     Cidy  Female   18     93
3   Daniel    Male   20     87
4    Ellen  Female   17     96
5  Frankie    Male   21    100
6     Gate    Male   20     88
7     Hebe  Female   22     98

基本操作
在进行对groupby函数进行学习之前,首先需要明确的是,通过对DataFrame对象调用groupby()函数返回的结果是一个DataFrameGroupBy对象,而不是一个DataFrame或者Series对象,所以,它们中的一些方法或者函数是无法直接调用的,需要按照GroupBy对象中具有的函数和方法进行调用。

grouped = df.groupby('Gender')
print(type(grouped))
print(grouped)

<class 'pandas.core.groupby.groupby.DataFrameGroupBy'>

分组时,不仅仅可以指定一个列名,也可以指定多个列名:

grouped = df.groupby('Gender')
grouped_muti = df.groupby(['Gender', 'Age'])

print(grouped.size())
print(grouped_muti.size())

Gender
Female    3
Male      5
dtype: int64

Gender  Age
Female  17     1
        18     1
        22     1
Male    18     1
        19     1
        20     2
        21     1
dtype: int64

指定多个列名个单个列名后的区别在于,分组的主键或者索引(indice)将一个是单个主键,另一个则是一个元组的形式:

print(grouped.get_group('Female'))
print(grouped_muti.get_group(('Female', 17)))

    Name  Gender  Age  Score
2   Cidy  Female   18     93
4  Ellen  Female   17     96
7   Hebe  Female   22     98
    Name  Gender  Age  Score
4  Ellen  Female   17     96

通过调用get_group()函数可以返回一个按照分组得到的DataFrame对象,所以接下来的使用就可以按照·DataFrame·对象来使用。如果想让这个DataFrame对象的索引重新定义可以通过:

df = grouped.get_group('Female').reset_index()
print(df)

   index   Name  Gender  Age  Score
0      2   Cidy  Female   18     93
1      4  Ellen  Female   17     96
2      7   Hebe  Female   22     98

这里可以总结一下,由于通过groupby()函数分组得到的是一个DataFrameGroupBy对象,而通过对这个对象调用get_group(),返回的则是一个·DataFrame·对象,所以可以将DataFrameGroupBy对象理解为是多个DataFrame组成的。
而没有调用get_group()函数之前,此时的数据结构任然是DataFrameGroupBy,此时进行对DataFrameGroupBy按照列名进行索引,同理就可以得到SeriesGroupBy对象,取多个列名,则得到的任然是DataFrameGroupBy对象,这里可以类比DataFrame和Series的关系。

按照上面的思路理解后,再调用get_group()函数后得到的DataFrame对象按照列名进行索引实际上就是得到了Series的对象,下面的操作就可以按照Series对象中的函数行了。

在没有进行调用get_group(),也就是没有取出特定某一组数据之前,此时的数据结构任然是DataFrameGroupBy,其中也有很多函数和方法可以调用,如max()、count()、std()等,返回的结果是一个DataFrame对象。

print(grouped.count())
print(grouped.max()[['Age', 'Score']])
print(grouped.mean()[['Age', 'Score']])

        Name  Age  Score
Gender                  
Female     3    3      3
Male       5    5      5
        Age  Score
Gender            
Female   22     98
Male     21    100
         Age      Score
Gender                 
Female  19.0  95.666667
Male    19.6  89.000000

如果其中的函数无法满足你的需求,你也可以选择使用聚合函数aggregate,传递numpy或者自定义的函数,前提是返回一个聚合值。

def getSum(data):
    total = 0
    for d in data:
        total+=d
    return total
print(grouped.aggregate(np.median))
print(grouped.aggregate({'Age':np.median, 'Score':np.sum}))
print(grouped.aggregate({'Age':getSum}))

aggregate函数不同于apply,前者是对所有的数值进行一个聚合的操作,而后者则是对每个数值进行单独的一个操作:

def addOne(data):
    return data + 1

df['Age'] = df['Age'].apply(addOne)
df['Age'] = df['Age'].apply(int)

可视化操作
对组内的数据绘制概率密度分布:

grouped['Age'].plot(kind='kde', legend=True)
plt.show()

在这里插入图片描述
由于grouped[‘Age’]是一个SeriesGroupby对象, 顾名思义, 就是每一个组都有一个Series. 所以直接plot相当于遍历了每一个组内的Age数据。
————————————————
版权声明:本文为CSDN博主「敲代码的quant」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/FrankieHello/article/details/97272990

七、Pandas删除数据的几种情况

开始之前,pandas中DataFrame删除对象可能存在几种情况 1、删除具体列 2、删除具体行 3、删除包含某些数值的行或者列
4、删除包含某些字符、文字的行或者列 本文就针对这四种情况探讨一下如何操作。

数据准备
模拟了一份股票交割的记录。

In [1]: import pandas as pd

In [2]: data = {
   ...:     '证券名称' : ['格力电器','视觉中国','成都银行','中国联通','格力电器','视觉中国','成都银行','中国联通'],
   ...:     '摘要': ['证券买入','证券买入','证券买入','证券买入','证券卖出','证券卖出','证券卖出','证券卖出'],
   ...:     '成交数量' : [500,1000,1500,2000,500,500,1000,1500],
   ...:     '成交金额' : [-5000,-10000,-15000,-20000,5500,5500,11000,15000]
   ...: }
   ...: 

In [3]: df = pd.DataFrame(data, index = ['2018-2-1','2018-2-1','2018-2-1','2018-2-1','2018-2-2','2018-2-2','2018-2-2','2018-2-3'])

In [4]: df
Out[4]: 
          成交数量   成交金额    摘要  证券名称
2018-2-1   500  -5000  证券买入  格力电器
2018-2-1  1000 -10000  证券买入  视觉中国
2018-2-1  1500 -15000  证券买入  成都银行
2018-2-1  2000 -20000  证券买入  中国联通
2018-2-2   500   5500  证券卖出  格力电器
2018-2-2   500   5500  证券卖出  视觉中国
2018-2-2  1000  11000  证券卖出  成都银行
2018-2-3  1500  15000  证券卖出  中国联通

删除具体列

In [5]: df.drop('成交数量',axis=1)
Out[5]: 
           成交金额    摘要  证券名称
2018-2-1  -5000  证券买入  格力电器
2018-2-1 -10000  证券买入  视觉中国
2018-2-1 -15000  证券买入  成都银行
2018-2-1 -20000  证券买入  中国联通
2018-2-2   5500  证券卖出  格力电器
2018-2-2   5500  证券卖出  视觉中国
2018-2-2  11000  证券卖出  成都银行
2018-2-3  15000  证券卖出  中国联通

删除具体行

In [6]: df.drop('2018-2-3')
Out[6]: 
          成交数量   成交金额    摘要  证券名称
2018-2-1   500  -5000  证券买入  格力电器
2018-2-1  1000 -10000  证券买入  视觉中国
2018-2-1  1500 -15000  证券买入  成都银行
2018-2-1  2000 -20000  证券买入  中国联通
2018-2-2   500   5500  证券卖出  格力电器
2018-2-2   500   5500  证券卖出  视觉中国
2018-2-2  1000  11000  证券卖出  成都银行

也可以根据行号删除记录,比如删除第三行

In [22]: df.drop(df.index[7])
Out[22]: 
          成交数量   成交金额    摘要  证券名称
2018-2-1   500  -5000  证券买入  格力电器
2018-2-1  1000 -10000  证券买入  视觉中国
2018-2-1  1500 -15000  证券买入  成都银行
2018-2-1  2000 -20000  证券买入  中国联通
2018-2-2   500   5500  证券卖出  格力电器
2018-2-2   500   5500  证券卖出  视觉中国
2018-2-2  1000  11000  证券卖出  成都银行

注意,这个办法其实不是按照行号删除,而是按照索引删除。如果index为3,则会将前4条记录都删除。这个方法支持一个范围,以及用负数表示从末尾删除。

删除特定数值的行(删除成交金额小于10000)

In [7]: df[ df['成交金额'] > 10000]
Out[7]: 
          成交数量   成交金额    摘要  证券名称
2018-2-2  1000  11000  证券卖出  成都银行
2018-2-3  1500  15000  证券卖出  中国联通
本例其实是筛选,如果需要保留,可以将筛选后的对象赋值给自己即可。

删除某列包含特殊字符的行

In [11]: df[ ~ df['证券名称'].str.contains('联通') ]
Out[11]: 
          成交数量   成交金额    摘要  证券名称
2018-2-1   500  -5000  证券买入  格力电器
2018-2-1  1000 -10000  证券买入  视觉中国
2018-2-1  1500 -15000  证券买入  成都银行
2018-2-2   500   5500  证券卖出  格力电器
2018-2-2   500   5500  证券卖出  视觉中国
2018-2-2  1000  11000  证券卖出  成都银行

如果想取包含某些字符的记录,可以去掉~

In [12]: df[ df['证券名称'].str.contains('联通') ]
Out[12]: 
          成交数量   成交金额    摘要  证券名称
2018-2-1  2000 -20000  证券买入  中国联通
2018-2-3  1500  15000  证券卖出  中国联通

八、Pandas的常用操作大全

点击这。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值