DataFrame 是一个表格型的数据结构,可以看成就是excel中的表格。
有行有列
每一行或者每一列都可以看成是一个Series,所以在创建DataFrame是可以使用Series创建。
DataFrame的创建
DataFrame 构造方法如下:
pandas.DataFrame( data, index, columns, dtype, copy)
- data:一组数据(ndarray、series, map, lists, dict 等类型)。
- index:索引值,或者可以称为行标签。
- columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
- dtype:数据类型。
- copy:拷贝数据,默认为 False。
Pandas DataFrame 是一个二维的数组结构,类似二维数组。
1. 一行一行的创建这个表格
如果给出的数据是一行一行的形式,怎么创建DF
先不考虑行索引和列标签,直接传递一个二维列表或者ndarray类型的二维数组,其中,二维数组内的每一个列表就是每一行的数据。
举例:
import numpy as np
import pandas as pd
#创建一个二维的ndarray
data = np.arange(12).reshape(3,4)
data
#每一行就是DF中的每一行
df = pd.DataFrame(data)
df
#可以看到行列索引在没有指定的时候都是从0开始的正整数
#指定索引
colIndex = ['col1','col2','col3','col4']
rowIndex = ['row1','row2','row3']
#指定列标签
df.columns = colIndex
#指定行索引
df.index = rowIndex
df
2.用列表嵌套字典按行创建
使用字典按照键值对的形式给出数据,创建DataFrame
data = [
#列表内的每一个字典就是一行数据,
#字典内的key就是列的标签
{'name':'张三','age':19,'sex':'m'},
{'name':'李四','age':20,'sex':'f'},
{'name':'王五','age':22,'sex':'m'}
]
df = pd.DataFrame(data,index = [100,101,102])
df
使用字典以列的形式创建DataFrame
给出的数据是列的形式下创建DF
创建中需要借助字典
#字典的key作为列的标签
#每一个key对应的value 就是这一列的数据
data = {
'name':['张三','李四','王五'],
'age':[19,20,22],
'sex':['m','f','m']
}
df = pd.DataFrame(data)
df
以Series按照列的形式创建DF
数据的读取
现在有一个DataFrame:
data = {
'name':['zs','ls','ww'],
'age':[19,20,22],
'sex':['男','女','男']
}
df = pd.DataFrame(data)
df
列的操作
1.用列索引选取某列数据
如果想要拿到age列的数据。使用列标签拿到df[‘列索引名称']
:
同时返回的数据是一个Series类型的数据
print(df['age'])
print(type(df['age']))
进一步想要将列的数据以ndarray数组的形式返回出来,则使用Series的values属性:
print(df['age'].values)
print(type(df['age'].values))
2.添加一列数据:
直接在末尾添加
添加一列数据就直接添加,添加的时候指定列的索引值就行:
#可以用Series类型来添加
df['yuwen'] = pd.Series([88,90,97])
#也可以是列表类型直接添加
df['shuxue'] = [100,90,70]
df
还可以直接使用列做加法操作:
df['sum'] = df['yuwen'] + df['shuxue']
df
字符类型也可以加,只是简单的拼接:
在指定位置添加列:
除了使用df[]=value的方式外,还可以使用 insert() 方法插入新的列,示例如下:
insert(loc, column, value, allow_duplicates=False)
Parameters
----------
loc : int
Insertion index. Must verify 0 <= loc <= len(columns).
column : str, number, or hashable object
Label of the inserted column.
value : int, Series, or array-like
allow_duplicates : bool, optional
主要参数在于loc, column, value:
- loc:指定插入的位置,列的整数索引值,其实列标签内部是有一个整数索引的,0:第一列,依次往后
- column:新插入的列的标签,也就是这一列的名字;
- value:插入列的数据,类型可以是:int, Series, or array-like
举例:
#在第一列位置插入一列
df.insert(0,column='id',value=[2201,2202,2203])
df
3. 删除某一列数据:
#使用del 指定列索引 来删除
del df['sum']
df
或者使用df.pop()
方法删除并返回该列的数据:
pop(item)
#参数
----------
item : label:删除的列的名称
Label of column to be popped.
#返回值
-------
Series:返回的是列的Series类型
shuxue = df.pop('shuxue')
print(type(shuxue))
print(shuxue)
df
行的操作
1. 行数据读取
行标签读取
一个参数
可以将行标签传递给 loc 函数,使用df.loc[行标签]
来选取数据。
loc 允许接两个参数分别是行和列,参数之间需要使用“逗号”隔开,但该函数只能接收标签索引。
两个参数
读取到表格中的某一个数据:
返回的时行索引值为second,列索引值为name 的这个单元格总的数据
行索引值读取(默认的整数索引)
一个参数
iloc 允许接受两个参数分别是行和列,参数之间使用“逗号”隔开,但该函数只能接收整数索引。
df.loc[0]会出错,要使用df.iloc[0]
两个参数
返回的时行索引为2,列索引为4的数据,即:
切片操作读取多行
这种方式只能读取多行,df[0]
会报错,所以取出单行数据就使用loc[]
或者iloc[]
添加数据行
可以先读取到某一行数据后,直接把这行数据添加到DataFrame中
#使用append()
#注意:这里使用append()之后,生成的是一个新的DF,原来的df没有改变,
#所以需要重新复制一下
#读取第2行数据,添加到df中,默认直接添加到最后一行
df = df.append(df.loc[1])
删除某一行数据
使用df.drop('标签索引')
删除指定行,参数必须是便签索引,不是内部的整数索引。同时删除后生成的是新df,不改变原来的df对象
删除前:
删除后:
df = df.drop('10')
#df.drop(0)会报错
df
常用属性和方法:
DataFrame 的属性和方法,与 Series 相差无几,如下所示:
1:values:把 df中的表格数据以ndarray类型返回:
二维数组中的每一行就是df中的每一行数据。