pandas 入门:DataFrame的创建,读写,插入和删除

不得不说DataFrame现在很火,已经有很多库都是基于DataFrame写的,而且它用起来也很方便,读excel只需要一行代码,想起使用xlrd的日子,至今还脑壳疼,所以对于一个用python做数据处理的人来说,pandas是必须要了解的。对于一个数据处理工具来说,读写是最基本的,下面是我最近整理的关于pandas一些基本本操作,主要包括以下内容:

  • 如何创建DataFrame
  • 如何读取DataFrame的值,读一行/列、读多行/列
  • 如何对DataFrame赋值
  • 如何对DataFrame插入一(多)行/列
  • 如何删除DataFrame的一(多)行/列

开始前先引入两个库

import pandas as pd
import numpy as np

1 创建DataFrame

1.1 利用字典创建
data={"one":np.random.randn(4),"two":np.linspace(1,4,4),"three":['zhangsan','李四',999,0.1]}
df=pd.DataFrame(data,index=[1,2,3,4])

在这里插入图片描述

  • 如果创建df时不指定索引,默认索引将是从0开时,步长为1的数组。
  • df的行、列可以是不同的数据类型,同行也可以有多种数据类型。
  • df创建完成后可以重新设置索引,通常用到3个函数:set_indexreset_indexreindex
  1. set _index用于将df中的一行或多行设置为索引。
    df.set_index(['one'],drop=False) ordf.set_index('one)
    df.set_index(['one','two'])
    参数drop默认为True,意为将该列设置为索引后从数据中删除,如果设为False,将继续在数据中保留该行。
    在这里插入图片描述
  2. 如果要设置的索引不在数据中,可以通过
    df.index=['a','b','c','d']
  3. reset_index用于将索引还原成默认值,即从0开始步长为1的数组。
    df.reset_index(drop=True)
    参数drop默认值为False,意为将原来的索引做为数据列保留,如果设为True,原来的索引会直接删除。
    在这里插入图片描述
  4. reindex比较复杂,也不常用到,这里是基础篇,不做大量说明,感兴趣的朋友可以看官方文档
1.2 利用数组创建
data=np.random.randn(6,4)#创建一个6行4列的数组
df=pd.DataFrame(data,columns=list('ABCD'),index=[1,2,'a','b','2006-10-1','第六行'])
1.3 创建一个空DataFrame
pd.DataFrame(columns=('id','name','grade','class'))

为了便于理解,以下面DataFrame为例,对其读写操作展开说明:
在这里插入图片描述

2 读DataFrame

2.1按列读取

方法1:df.列名
该方法每次只能读取一列。
在这里插入图片描述
方法2:df['列名']or df[['列名']]df[['列名1','列名2','列名n']]
在这里插入图片描述
ps:df['A']df[['A']]都能读取第一列数据,但它们的返回结果是不同的,这里的不同指的是数据结构的不同,感兴趣的朋友可以用type(df['A']),type(df[['A']])查看。
方法3 .iloc[:,colNo] or .iloc[:,colNo1:colNo2]
按列号读取,有时候我们可能更希望通过列号(1,2,3…)读取数据而不是列名,又或着我们要读取多行的时候一个一个输入列名是很麻烦的,我们希望有最简单的代码读取我们最想要的内容,.iloc方法可以让我们通过列号索引数据,具体如下:
df.iloc[:1]读取第一列
df.iloc[:,1:3]读取第1列到第3列
df.iloc[:,2:]读取第2列之后的数据
df.iloc[:,:3]读取前3列数据
ps:这其实是按单元格读取数据的特殊写法,如果有疑问请看 2.3 按单元格读取数据

2.2 按行读取

方法1:.loc['行标签']or.loc[['行标签']].loc[['行标签1','行标签2','行标签n']]
.loc根据行标签索引数据,这里的行标签可以理解为索引(没有深入研究,但是在这里,行标签=索引),比如我们要分别读取第1行和第3行就是df[[1]]df[['a']],如果该df的索引变为['a', 'b', 'c', 'd', 'e', 'f'],分别读取第1行和第3行的操作将变成df[['a']],df[['c']],也就是说.loc后面的'行标签'必须在索引中。
在这里插入图片描述
ps:df.loc[[1]]df.loc[1]返回结果的值相同,但数据结构有差异
方法2:.iloc['行号']or.iloc[['行号']].iloc[['行号1','行号2','行号n']]
.iloc根据行号索引数据,行号是固定不变的,不受索引变化的影响,如果df的索引是默认值,则.loc和.iloc的用法没有区别,因为此时行号和行标签相同。
在这里插入图片描述
可以看到df.loc[1]df.iloc[1]读到的内容是不一样的,df.loc[1]读取的是索引号为1的那一行,df.iloc[1]读取的是第1行。
此外,.iloc可以通过切片的方式读取数据,所谓切片就是给出要读数据的首尾位置,然后读取首尾中间这“一片”数据(个人理解,可能理解的不对或比较片面,对此有疑惑的朋友请自行查阅相关资料)比如我们要读取第1行到第4行的数据,利用切片的方法就是df.iloc[1:5]
在这里插入图片描述
如果从第0行开始读,则首位置可以省略,如果从某一行读到末尾,则尾位置可以省略。
df.iloc[:5],读取第0行到第4行的数据;
df.iloc[8:],读取第8行后所有数据,包括第8行;
df.iloc[3,6],读取第3行到第6行的数据,包括第3行但不包括第6行。
方法3:.ix
根据其他网友的说法,.ix是.loc和.iloc的综合版,既可以通过行标签检索也可以根据行号检索。通过实验发现这个说法并不完成正确。以上面的df为例:
在这里插入图片描述
因为df.ix[[1]]可以认为是要读第1行,也可以认为要读索引为1的那一行,此时就产生了冲突,可以看到此时pandas认为df.ix[[1]]读的是索引为1的那一行,如果用索引外的标签检索就会报错,而df.ix[1]被认为是第1行,此时df.ix[1]df.ix[[1]]读到的不是同一行数据。
如果我们将df的索引改为['a', 'b', 'c', 'd', 'e', 'f']再进行上面的操作
在这里插入图片描述
此时df.ix[5]df.ix[[5]]读到的是同一行数据。
通过以上实验,locilocix的区别如下:
loc通过索引标签读取数据;
iloc通过行号读取数据;
ix既可以通过行号读取数据,也可以通过索引标签读取数据,但是当索引为数字且不从0开始时,有两种情况:
(1)每次读一行:通过索引标签读取和通过行号读取有不同的写法.ix[['列标签']],.ix[行号]
(2)读取多行:此时只能通过索引标签,不能利用行号。
方法4:atiat
atiat这里就不做介绍了,因为上面的方法完全够用了,感兴趣的话可以看官方文档
.loc,.iloc完全可以满足DataFrame的读取操作,所以ix,at,iat并不推荐使用。

2.3 按单元格读取

方法1:df[col][row]
读取一个单元格的数据时推荐使用,也可以写成df.col[row]
在这里插入图片描述
方法2:.loc
(1)读取一个单元格:df.loc[row][col]df.loc[row,col]
(2)读取一行多列:

  • df.loc[row][[col1,col2]]
  • df.loc[1,[col1,col2]]
  • df.loc[row][firstCol:endCol]
  • df.loc[row,firstCol:endCol]
    在这里插入图片描述
    (3)读取多行一列:
  • df.loc[[row1,row2]][col]
  • df.loc[[row1,row2]].col
  • df.loc[[row1,row2],col]
    在这里插入图片描述
    ps :在这里行号不能用切片。
    (4)读取多行多列
  • df.loc[[row1,row2],[col1,col2]]
  • df.loc[[row1,row2]][[col1,col2]]
  • df.loc[[row1,row3],firstCol:endCol]
    在这里插入图片描述
    ps:这里行号同样不能用切片,说明loc不支持行号切片索引。
    方法3:.iloc
    (1)读取一个单元格
  • df.iloc[rowNo].col
  • df.iloc[rowNo][col]
  • df.iloc[rowNo,colNo]
    ps:df.iloc[rowNo,col]不支持。
    (2)读取一行多列
  • df.iloc[rowNo,firestColNo,endColNo]
  • df.iloc[rowNo][[col1,col2]]
  • df.iloc[rowNo][firesCol:endCol]
    在这里插入图片描述
    ps:df.iloc[rowNo,[col1,col2]],
    df.iloc[rowNo,firstColNo:endColNo]均不支持。

    (3)读取多行一列
  • df.iloc[[rowNo1,rowNo2],colNo]
  • df.iloc[firstRowNo:endRowNo,colNo]
  • df.iloc[[rowNo1,rowNo2]][col]
  • df.iloc[firstRowNo,endRowNo][col]
    在这里插入图片描述
    (4)读取多行多列
  • df.iloc[firstRowNo:endRowNo,firstColNo:endColNo]
  • df.iloc[[RowNo1,RowNo2],[ColNo1,ColNo2]]
  • df.iloc[firstRowNo:endRowNo][[col1,col2]]
    在这里插入图片描述
    方法4:.ix
    累的不行了,这里就直接写多行多列的读取吧。
  • df.ix[firstRow/firstRowNo:endRow/endRowNo,firstCol/firstColNo:endCol/endColNo]
  • df.ix[[row1/rowNo1,row2,rowNo2],[col1/colNo1,col2,colNo2]]
    在这里插入图片描述
    方法5: at,iat

3 写DataFrame/DataFrame赋值

3.1 按列赋值
  • df.col=colList/colValue
  • df[col]=colList/colValue
    eg. df.A=[1,2,3,4,5,6],df['A']=0
    ps1:如果用一个列表或数组赋值,其长度必须和df的行数相同
3.2 按行赋值
  • df.loc[row]=rowList
  • df.loc[row]=rowValue
3.3 给多行多列赋值
  • df.loc[[row1,row2],[col1,col2]]=value/valueList
  • df.iloc[[rowNo1,rowNo2],[colNo1,colNo2]]=value/valueList
  • df.iloc[[rowNo1,rowNo2]][[col1,col2]]=value/valueList
  • df.ix[firstRow:endRow,firstCol:endCol]=value/valueList

ps:DataFrame的读写操作是多变的,这里也仅仅列出了几种常用的方法,熟练一种方式即可。

4 DataFrame的插入

以下面DataFrame为例展开说明
在这里插入图片描述

4.1在任意位置插入
插入一列
insert(ioc,column,value)
ioc:要插入的位置
colunm:列名
value:值

在这里插入图片描述

插入一行
row={'one':111,'two':222,'three':333}
df.loc[1]=row or
df.iloc[1]=row or 
df.ix[1]=row or 
4.2在末尾插入

如果插入一行或一列,用上面的方法把插入位置改为末尾即可,下面给出插入多行多列的方法。

pandas.concat(objs, axis=0, join_axes=None, ignore_index=False)
objs:合并对象
axis:合并方式,默认0表示按列合并,1表示按行合并
ignore_index:是否忽略索引 

有df1和df2定义如下:
在这里插入图片描述

按行合并

在这里插入图片描述

按列合并

在这里插入图片描述
利用append函数可以完成相同的操作:
在这里插入图片描述

5 DataFrame的删除操作

drop(labels, axis=0, level=None, inplace=False)
lables:要删除数据的标签
axis:0表示删除行,1表示删除列,默认0
inplace:是否在当前df中执行此操作

在这里插入图片描述

后记:关于pandas的基本操作就写到这里了,关于以上内容如果有什么问题可以通过邮件联系博主,水平有限,请大家批评指正。
后面如果有机会,我会写关于DataFrame更进一步的操作,我也不知道会不会写,能写多少,先附上地址pandas进阶:DataFrame高级操作

  • 405
    点赞
  • 2876
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论
### 回答1: 可以使用pandasDataFrame函数来创建一个DataFrame对象,其中可以传入一个字典作为参数。字典的键作为列名,字典的值作为该列的数据。例如: ``` import pandas as pd data = {'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35], 'gender': ['F', 'M', 'M']} df = pd.DataFrame(data) print(df) ``` 输出结果为: ``` name age gender Alice 25 F 1 Bob 30 M 2 Charlie 35 M ``` 其中,字典的键为'name'、'age'和'gender',分别对应DataFrame的三列。字典的值为一个列表,分别对应每一列的数据。 ### 回答2: pandas是一个用于数据分析的Python库,它提供了一种名为DataFrame的数据结构,可以方便地处理表格数据或者结构化数据。在pandas中,可以通过字典创建DataFrame。 首先,我们需要导入pandas库: ```python import pandas as pd ``` 然后,我们可以使用字典创建DataFrame。下面是一个例子: ```python data = {'name': ['Alice', 'Bob', 'Charlie', 'David'], 'age': [25, 30, 35, 40], 'sex': ['F', 'M', 'M', 'M'], 'height': [165, 170, 175, 180]} df = pd.DataFrame(data) print(df) ``` 在这个例子中,我们定义了一个字典,其中包含四个键值对,每个键值对代表DataFrame中的一列数据。其中,'name','age','sex','height'分别表示姓名、年龄、性别、身高。键对应的值是一个列表,表示该列的具体数据。然后,我们使用pd.DataFrame函数将字典转换成DataFrame,并将结果保存在df变量中。最后,使用print函数输出结果。 运行上述代码,输出的结果如下: ``` name age sex height 0 Alice 25 F 165 1 Bob 30 M 170 2 Charlie 35 M 175 3 David 40 M 180 ``` 可以看到,DataFrame的每列都被正确地读入,行索引默认从0开始。 在这个例子中,我们使用了一个简单的字典创建DataFrame的方法。除此之外,我们还可以通过调整字典中的键值对顺序或者增加或者删除键值对来改变DataFrame的列的顺序或者添加或者删除列。此外,还可以通过更改行索引或者列名来进一步调整DataFrame的结构。不管怎么样,使用字典创建DataFrame都非常方便和灵活,能够满足数据分析时的各种需求。 ### 回答3: PandasPython中非常流行的数据处理和分析库。其中一个最常用的功能是DataFrame,它是一个二维表格结构,用于存储和处理数据。使用Pandas中的DataFrame可以进行数据清洗、处理、描述统计分析等操作,是科学计算和数据分析中的必备工具。 Pandas中的DataFrame可以通过多种方式创建,其中之一是使用Python中的字典。下文将详细介绍如何使用字典创建DataFrame。 首先,我们需要导入pandas库: ``` import pandas as pd ``` 然后,我们可以使用一个字典来创建DataFrame。字典中的key表示列名,value是对应列中的数据。 ``` data = {'姓名': ['张三', '李四', '王五', '赵六'], '年龄': [21, 25, 28, 32], '性别': ['男', '女', '男', '女'], '成绩': [80, 90, 85, 88]} df = pd.DataFrame(data) ``` 上述代码将创建一个包含4行数据的DataFrame。其中包含4个列,分别是“姓名”,“年龄”,“性别”和“成绩”。DataFrame的索引将默认从0开始。 如果需要指定索引,可以将索引序列作为字典中的另一个key进行指定。 ``` data = {'姓名': ['张三', '李四', '王五', '赵六'], '年龄': [21, 25, 28, 32], '性别': ['男', '女', '男', '女'], '成绩': [80, 90, 85, 88]} index = ['A1', 'A2', 'A3', 'A4'] df = pd.DataFrame(data, index=index) ``` 上述代码将创建一个包含4行数据的DataFrame。其中包含4个列,分别是“姓名”,“年龄”,“性别”和“成绩”。DataFrame的索引将被指定为“A1”、“A2”、“A3”和“A4”。 在创建DataFrame时,可以使用columns参数指定列的顺序。 ``` data = {'姓名': ['张三', '李四', '王五', '赵六'], '年龄': [21, 25, 28, 32], '性别': ['男', '女', '男', '女'], '成绩': [80, 90, 85, 88]} index = ['A1', 'A2', 'A3', 'A4'] columns = ['姓名', '年龄', '性别', '成绩'] df = pd.DataFrame(data, index=index, columns=columns) ``` 在上述代码中,我们指定了“姓名”列要优先于“年龄”列出现,以此类推。 总之,使用Python中的字典可以创建一个包含数值的DataFrame,非常方便和灵活。在创建时,需要确保字典的key对应列名,value对应列中的数据,即可快速创建一个完整的DataFrame
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

裘千仞不会水上漂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值