Pandas统计分析基础:DataFrame功能介绍及DataFrame中元素的增删改查
Posted Xlong~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas统计分析基础:DataFrame功能介绍及DataFrame中元素的增删改查相关的知识,希望对你有一定的参考价值。
✅作者简介:大家好我是Xlong,一枚正在学习COMSOL、Python的工科研究僧
📃个人主页: Xlong的个人博客主页
🔥系列专栏: Python大数据分析
💖如果觉得博主的文章还不错的话,请👍支持一下博主哦🤞
目录
方法2: 可以通过列名(字典数据类型里的key值)来索引列,再通过跟ndarray相同的索引方式索引行
方法3:DataFrame.loc 和.iloc两种读取方法(建议使用)
一、 DataFrame功能介绍
1.1 DataFrame元素的读取
要注意区别和二维数组的读取方式不同!
import numpy as np
arr=np.ones([2,3])
print(arr,'\\n')
print(arr[0,1])
运算结果:
[[1. 1. 1.]
[1. 1. 1.]]1.0
import numpy as np
import pandas as pd
arr=np.ones([2,3])
print(arr,'\\n')
df=pd.DataFrame(arr,index=['第一行','第二行'],columns=['第一列','第二列','第三列'])
print(df)
#print(df[0,1]) #会报错:KeyError: (0, 1)
运行结果:
[[1. 1. 1.]
[1. 1. 1.]]第一列 第二列 第三列
第一行 1.0 1.0 1.0
第二行 1.0 1.0 1.0
DataFrame不支持以刚才代码中的方式读取数据,可以认为其各列是以字典形式储存,不支持按序号索引。
方法1:可以将DataFrame转化成ndarray后读取
import numpy as np
import pandas as pd
arr=np.ones([2,3])
print(arr,'\\n')
df=pd.DataFrame(arr,index=['第一行','第二行'],columns=['第一列','第二列','第三列'])
print(df,'\\n')
#print(df[0,1]) #会报错:KeyError: (0, 1)
# values属性会返回一个ndarray数组
print(df.values,'\\n')
print(type(df.values))
运行结果:
[[1. 1. 1.]
[1. 1. 1.]]第一列 第二列 第三列
第一行 1.0 1.0 1.0
第二行 1.0 1.0 1.0[[1. 1. 1.]
[1. 1. 1.]]<class 'numpy.ndarray'>
import numpy as np
import pandas as pd
arr=np.ones([2,3])
df=pd.DataFrame(arr,index=['第一行','第二行'],columns=['第一列','第二列','第三列'])
print(df.values,'\\n')
print(df.values[0,1])
运行结果:
[[1. 1. 1.]
[1. 1. 1.]]1.0
方法2: 可以通过列名(字典数据类型里的key值)来索引列,再通过跟ndarray相同的索引方式索引行
import numpy as np
import pandas as pd
arr=np.ones([2,3])
df=pd.DataFrame(arr,index=['第一行','第二行'],columns=['第一列','第二列','第三列'])
print(df.index,'\\n')
print(type(df.index),'\\n')
print(df.columns,'\\n')
print(type(df.columns),'\\n')
print(df['第一列'][0],'\\n')
print(df[:][1:]) #第一个中括号里的冒号表示所有列
运行结果:
Index(['第一行', '第二行'], dtype='object')
<class 'pandas.core.indexes.base.Index'>
Index(['第一列', '第二列', '第三列'], dtype='object')
<class 'pandas.core.indexes.base.Index'>
1.0
第一列 第二列 第三列
第二行 1.0 1.0 1.0
要注意下述方式会等效为df[:][1:],但下述写法是存在歧义的,不推荐使用
df[1:3] #这种写法不推荐
方法3:DataFrame.loc 和.iloc两种读取方法(建议使用)
注意,这两种方法都是先行后列,与上边的先列后行相反
import numpy as np
import pandas as pd
arr=np.ones([2,3])
df=pd.DataFrame(arr,index=['第一行','第二行'],columns=['第一列','第二列','第三列'])
print(df.loc['第一行','第一列'],'\\n')
print(df.loc['第一行','第一列':'第二列'],'\\n')
#loc提供了类似二维数组的读取方法,但只接收行名和列名,区间是左闭右闭的)
print(df.loc[[True,False],'第一列'],'\\n')
运行结果:
1.0
第一列 1.0
第二列 1.0
Name: 第一行, dtype: float64第一行 1.0
Name: 第一列, dtype: float64
iloc则要接收数字编号,与.loc不同,不能混用
import numpy as np
import pandas as pd
arr=np.ones([2,3])
df=pd.DataFrame(arr,index=['第一行','第二行'],columns=['第一列','第二列','第三列'])
#print(df.iloc['第二行','第一列'],'\\n') #iloc则要接收数字编号,与.loc不同,不能混用
print(df.iloc[1,0])
运行结果:
1.0
1.2 DataFrame中元素的修改
只要能读出元素的方式,都可以用来进行赋值修改。
import numpy as np
import pandas as pd
arr=np.ones([2,3])
df=pd.DataFrame(arr,index=['第一行','第二行'],columns=['第一列','第二列','第三列'])
df.iloc[0,1]=5 #把5赋给第一行&第二列位置
print(df,'\\n')
df.loc[[True,False],'第二列']=[4] #把4赋给第一行&第四列位置
print(df)
运行结果:
第一列 第二列 第三列
第一行 1.0 5.0 1.0
第二行 1.0 1.0 1.0第一列 第二列 第三列
第一行 1.0 4.0 1.0
第二行 1.0 1.0 1.0
1.3 DataFrame添加、删除元素
1.3.1 添加列或行
添加比较简单,直接对新的行列名赋值即可。
import numpy as np
import pandas as pd
arr=np.ones([2,3])
df=pd.DataFrame(arr,index=['第一行','第二行'],columns=['第一列','第二列','第三列'])
df['第四列']=[2,3]
print(df,'\\n')
df.loc['第五行']=6
print(df)
'''不推荐使用以下形式添加行
df[:]['第N行']=9
print(df)''
运行结果:
第一列 第二列 第三列 第四列
第一行 1.0 1.0 1.0 2
第二行 1.0 1.0 1.0 3第一列 第二列 第三列 第四列
第一行 1.0 1.0 1.0 2
第二行 1.0 1.0 1.0 3
第五行 6.0 6.0 6.0 6
1.3.2 删除行或列,pd.DataFrame.drop
import numpy as np
import pandas as pd
arr=np.ones([2,3])
df=pd.DataFrame(arr,index=['第一行','第二行'],columns=['第一列','第二列','第三列'])
dfr=df.drop('第一列',axis=1) #删除'第一列'这列,axis=1表示是列
'''但要注意,默认情况下,drop命令是返回一个删除了'第一列'之后的DataFrame,
并不是在df里把'第一列'删了'''
print(dfr)
print(df)
运行结果:
第二列 第三列
第一行 1.0 1.0
第二行 1.0 1.0
第一列 第二列 第三列
第一行 1.0 1.0 1.0
第二行 1.0 1.0 1.0
如果想在原始DataFrame中执行删除,需要修改属性inplace=True
import numpy as np
import pandas as pd
arr=np.ones([2,3])
df=pd.DataFrame(arr,index=['第一行','第二行'],columns=['第一列','第二列','第三列'])
df.drop('第二行',axis=0,inplace=True)
print(df)
运行结果:
第一列 第二列 第三列
第一行 1.0 1.0 1.0
1.3.3 DataFrame数据的备份
import numpy as np
import pandas as pd
arr=np.ones([2,3])
df=pd.DataFrame(arr,index=['第一行','第二行'],columns=['第一列','第二列','第三列'])
dfback=df
print(dfback)
df.iloc[0,0]=3
print(df)
print(dfback)
print(id(df))
print(id(dfback))
运行结果:
第一列 第二列 第三列
第一行 1.0 1.0 1.0
第二行 1.0 1.0 1.0
第一列 第二列 第三列
第一行 3.0 1.0 1.0
第二行 1.0 1.0 1.0
第一列 第二列 第三列
第一行 3.0 1.0 1.0
第二行 1.0 1.0 1.02404490356528
2404490356528
可见:直接赋值的形式并不能复制DataFrame,只是起了个新名字,指向的还是同一个内容
如果想复制一个DataFrame,需要使用copy包
这个包是python自带的,一般不需要另外安装
import numpy as np
import pandas as pd
import copy
arr=np.ones([2,3])
df=pd.DataFrame(arr,index=['第一行','第二行'],columns=['第一列','第二列','第三列'])
dfback1=copy.deepcopy(df)
print(dfback1)
print(df)
df.iloc[0,0]=10
print(df)
print(dfback1)
运行结果:
第一列 第二列 第三列
第一行 1.0 1.0 1.0
第二行 1.0 1.0 1.0
第一列 第二列 第三列
第一行 1.0 1.0 1.0
第二行 1.0 1.0 1.0
第一列 第二列 第三列
第一行 10.0 1.0 1.0
第二行 1.0 1.0 1.0
第一列 第二列 第三列
第一行 1.0 1.0 1.0
第二行 1.0 1.0 1.0
以上就是《Pandas统计分析基础(3):DataFrame功能介绍及DataFrame中元素的增、删、改、查》,如果有改进的建议,欢迎在评论区留言交流~
持续更新中......原创不易,各位看官请随手点下Follow和Star,感谢!!!
以上是关于Pandas统计分析基础:DataFrame功能介绍及DataFrame中元素的增删改查的主要内容,如果未能解决你的问题,请参考以下文章
Pandas的介绍及 Series DataFrame的创建
利用Python进行数据分析:Pandas(Series+DataFrame)