本文章为个人在学习pandas中 DataFrame 部分内容的一些整理 。
注:总结并完全,DataFrame还有更多操作,此文章仅仅是我这几天学习的一点整理。
DataFrame
DataFrame是一个表格型的数据结构,是以一个或多个二维块存放的数据表格(层次化索引),DataFrame既有行索引还有列索引,它有一组有序的列,每列既可以是不同类型(数值、字符串、布尔型)的数据,或者可以看做有Series组成的字典。
类型 | 说明 |
---|---|
二维ndarray | 数据矩阵,还可以传入行标和列标 |
由数组、列表或元组组成的字典 | 每个序列会变成DataFrame的一列,所有序列的长度必须相同 |
Numpy的结构化/记录数组 | 类似于“又数组组成的字典” |
由Series组成的字典 | 每个Series会成为一列,如果没有显示指定索引,则个Series的索引会被合并(考虑到数字对齐的情况)成结果的行索引 |
由字典组成的字典 | 各内层字典会成为一列,每个字典的键会被合并成结果的行索引 |
字典或Series的列表 | 各项将会成为DataFrame的一行,字典键或series索引的并集将会成为DataFrame的列表 |
由列表或元组组成的列表 | 类似于“二维ndarray” |
另一个DataFrame | 该DataFrame的索引将会被沿用,除非显式指定了其他索引 |
Numpy的MaskedArray | 类似于“二维ndarray”的情况,只是掩码值在结果DataFrame会变成NA/缺失值 |
DataFrame创建
import pandas as pd
import numpy as np
df=pd.DataFrame({'name':['aa','bb','cc'],'pay':[100,200,300]})
print(df)
####
name pay
0 aa 100
1 bb 200
2 cc 300
import pandas as pd
import numpy as np
df=pd.DataFrame(np.arange(12).reshape(3,4),index=list('abc'),columns=list('abcd'))
print(df)
####
a b c d
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
import pandas as pd
import numpy as np
df=pd.DataFrame({'name':['aa','bb','cc'],'pay':[100,200,300]})
df['add']=[1,2,3] #增加
print(df)
name pay add
0 aa 100 1
1 bb 200 2
2 cc 300 3
##数字对齐,add1中多余的部分会被切掉,而add2中缺少的部分会被NaN值填充
import pandas as pd
import numpy as np
df=pd.DataFrame({'name':['aa','bb','cc'],'pay':[100,200,300]})
value=pd.Series([1,2,3,4,5],index=[0,1,2,3,4])
value1=pd.Series([10,12],index=[0,1])
df['add']=[1,2,3]
df['add1']=value
df['add2']=value1
print(df)
####
name pay add add1 add2
0 aa 100 1 1 10.0
1 bb 200 2 2 12.0
2 cc 300 3 3 NaN
DataFrame 切片和索引
import pandas as pd
import numpy as np
df=pd.DataFrame({'name':['aa','bb','cc'],'pay':[100,200,300]})
value=pd.Series([1,2,3,4,5],index=[0,1,2,3,4])
value1=pd.Series([10,12],index=[0,1])
df['add']=[1,2,3]
df['add1']=value
df['add2']=value1
print(df[1:3])
####
name pay add add1 add2
1 bb 200 2 2 12.0
2 cc 300 3 3 NaN
import pandas as pd
import numpy as np
df=pd.DataFrame({'name':['aa','bb','cc'],'pay':[100,200,300]})
value=pd.Series([1,2,3,4,5],index=[0,1,2,3,4])
value1=pd.Series([10,12],index=[0,1])
df['add']=[1,2,3]
df['add1']=value
df['add2']=value1
s=df['name']
print(s)
####
0 aa
1 bb
2 cc
Name: name, dtype: object
import pandas as pd
import numpy as np
df=pd.DataFrame({'name':['aa','bb','cc'],'pay':[100,200,300]})
value=pd.Series([1,2,3,4,5],index=[0,1,2,3,4])
value1=pd.Series([10,12],index=[0,1])
df['add']=[1,2,3]
df['add1']=value
df['add2']=value1
print(df[['name','add']])
####
name add
0 aa 1
1 bb 2
2 cc 3
#交换第一列和第二列的值
import pandas as pd
import numpy as np
df=pd.DataFrame({'name':['aa','bb','cc'],'pay':[100,200,300]})
value=pd.Series([1,2,3,4,5],index=[0,1,2,3,4])
value1=pd.Series([10,12],index=[0,1])
df['add']=[1,2,3]
df['add1']=value
df['add2']=value1
df.loc[:,['pay','name']]=df[['name','pay']].values
print(df[['name','pay']])
####
name pay
0 100 aa
1 200 bb
2 300 cc
loc属性访问:
#基本示例代码及其输出结果 注:由于使用random输出数值,因此后面示例中每次输出的数值都是变化的
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(6,4),index=list('abcdef'),columns=list('ABCD'))
print(df)
####
A B C D
a -0.109559 0.029060 1.293133 -0.436300
b -0.419417 -1.467318 -0.748838 0.518618
c -1.762349 0.263882 -0.070989 1.153927
d 0.380648 -0.172981 0.737856 -0.039851
e -0.585820 -0.502932 -0.858317 -1.223934
f 1.058826 -0.275914 0.607841 0.407702
按标签选择(loc):
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(6,4),index=list('abcdef'),columns=list('ABCD'))
print(df.loc[['a','b','c'],:])
####
A B C D
a 1.001830 0.216401 1.625705 -0.169794
b 0.023062 -0.994016 -0.309449 1.272813
c 1.004900 0.825738 0.767043 -0.107114
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(6,4),index=list('abcdef'),columns=list('ABCD'))
print(df.loc['d':,'A':'C'])
####
A B C
d -0.512204 -1.049916 1.340404
e 1.151300 0.826390 0.630450
f 0.950106 0.068678 -0.254349
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(6,4),index=list('abcdef'),columns=list('ABCD'))
print(df.loc['a'])
####
A -0.677992
B 0.040744
C 0.833783
D -0.138422
Name: a, dtype: float64
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(6,4),index=list('abcdef'),columns=list('ABCD'))
print(df.loc['a']>0)
####
A False
B True
C False
D False
Name: a, dtype: bool
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(6,4),index=list('abcdef'),columns=list('ABCD'))
print(df.loc['a','A'])
####
-0.5031521904958901
按位置选择(iloc):
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(6,4),index=list('abcdef'),columns=list('ABCD'))
print(df.iloc[:3])
####
A B C D
a 0.143855 -1.240150 -0.426173 0.145956
b -1.681027 1.327813 -0.060675 -0.722033
c -0.318719 1.037630 0.229185 -0.328399
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(6,4),index=list('abcdef'),columns=list('ABCD'))
print(df.iloc[1:4,2:4])
####
C D
b -0.799387 -0.995885
c 0.912693 -0.492005
d -0.358651 0.963182
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(6,4),index=list('abcdef'),columns=list('ABCD'))
print(df.iloc[[1,3,5],[1,3]])
####
B D
b -1.028732 0.386360
d 1.507547 0.108043
f -0.677190 2.200727
import pandas as pd
import numpy as np
df=pd.DataFrame(np.random.randn(6,4),index=list('abcdef'),columns=list('ABCD'))
print(df.iloc[1:3,:])
print(df.iloc[2,1])
####
A B C D
b -0.159791 -0.105850 0.761435 0.778722
c -1.294700 -0.956018 0.038091 -1.121679
-0.9560181811847951