引入库
import pandas as pd
import numpy as np
pandas官方文档:https://pandas.pydata.org/pandas-docs/stable
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
one | two | three | |
---|---|---|---|
1 | 1.087681 | 1.0 | zhangsan |
2 | -1.702143 | 2.0 | 李四 |
3 | 0.153510 | 3.0 | 999 |
4 | -0.206473 | 4.0 | 0.1 |
索引
- 如果创建df时不指定索引,默认索引将是从0开时,步长为1的数组。
- df的行、列可以是不同的数据类型,同行也可以有多种数据类型。
- df创建完成后可以重新设置索引,通常用到3个函数:
set_index
、reset_index
、reindex
。
-
set _index
用于将df中的一行或多行设置为索引。参数
drop
默认为True,意为将该列设置为索引后从数据中删除,如果设为False,将继续在数据中保留该行。
# df.set_index('one')
df.set_index(['one'],drop=False)
one | two | three | |
---|---|---|---|
one | |||
1.087681 | 1.087681 | 1.0 | zhangsan |
-1.702143 | -1.702143 | 2.0 | 李四 |
0.153510 | 0.153510 | 3.0 | 999 |
-0.206473 | -0.206473 | 4.0 | 0.1 |
- 如果要设置的索引不在数据中,可以通过
df.index=['a','b','c','d']
reset_index
用于将索引还原成默认值,即从0开始步长为1的数组。
df.reset_index(drop=True)
参数
drop
默认值为False,意为将原来的索引做为数据列保留,如果设为True,原来的索引会直接删除。
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','第六行'])
df
A | B | C | D | |
---|---|---|---|---|
1 | -1.468370 | 0.148891 | -0.463374 | 0.201060 |
2 | 0.483324 | -0.518111 | -1.238487 | 0.949822 |
a | -0.909020 | -0.111295 | -0.833337 | 1.560756 |
b | -0.034978 | 0.036142 | -1.613437 | 2.040824 |
2006-10-1 | -0.312716 | -2.481801 | -0.607386 | -0.763655 |
第六行 | 0.300200 | -0.618587 | 0.187557 | 0.416438 |
1.3 创建一个空DataFrame
pd.DataFrame(columns=('id','name','grade','class'))
2. 读取DataFrame
2.1 按列读取
df.列名
:每次读取一列df['列名']
或df[['列名1','列名2','列名n']]
或df.loc[:,['列名']]
df[['A','B','D']]
df.loc[:,['A','B','D']]
A | B | D | |
---|---|---|---|
1 | -1.468370 | 0.148891 | 0.201060 |
2 | 0.483324 | -0.518111 | 0.949822 |
a | -0.909020 | -0.111295 | 1.560756 |
b | -0.034978 | 0.036142 | 2.040824 |
2006-10-1 | -0.312716 | -2.481801 | -0.763655 |
第六行 | 0.300200 | -0.618587 | 0.416438 |
PS: df[‘A’]和 df[[‘A’]]都能读取第一列数据,但它们返回的数据结构不同:
- type(df[‘A’]): pandas.core.series.Series
- type(df[[‘A’]]): pandas.core.frame.DataFrame
-
df.iloc[:,colNo]
: 按列号读取。有时候我们可能更希望通过列号(1,2,3…)或读取数据而不是列名,又或着我们要读取多行的时候一个一个输入列名是很麻烦的,我们希望有最简单的代码读取我们最想要的内容,.iloc方法可以让我们通过列号索引数据,具体如下:
- df.iloc[:,:3]读取前3列数据
- df.iloc[:,:]读取所有列
PS: 这其实是按单元格读取数据的特殊写法,如果有疑问请看 2.3 按单元格读取数据。
df.iloc[:,2:]