创建方法 分为直接定义和导入定义 1、直接定义:pd.DataFrame(),pd.DataFrame()的参数可以是ndarray,列表,字典,元组、Series等。
1 2 3 4 5 6 7 8 import numpy as npimport pandas as pddf1=pd.DataFrame(np.arange(10 ).reshape(2 ,5 )) print(df1)
2、导入定义:当用Pandas包导入一个外部文件时,将自动转换为DataFrame对象
1 2 3 4 df2 = pd.read_csv('bc_data.csv' ) df2.shape
DataFrame中的行/列 查看行——用index属性
计算行数——用.index.size属性
查看列——用columns属性
计算列数——用.columns.size属性
同时显示行数和列数,即查看DataFrame的形状——用.shape属性
计算行数和列数的另一个方法——.shape[0]和.shape[1]
1 2 3 4 5 print("行数为:" , df2.shape[0 ]) print("列数为:" , df2.shape[1 ])
访问元素的方法 1.按列名读取
列名和行号一起用。数据框的第0轴为列,所以不能写成df2[2][“id”]
2.按照index读取 在python中,每个数据有两种index,一种是默认的,从0开始(隐式index);另一种是通过index属性定义的(显式index)。为了区分。隐式用iloc,显式用loc。特别地,与C和Java不同的是,Python中的的Data Frame计算的依据并非为【隐式index】,而是【显式index】。
1 2 3 4 df2.loc[[1 ,5 ],["id" ]]
index操作
更改显式index的方法:用reindex()方法,更改显式index的含义:并不是指重新给出新index,而是调整索引的index。
1 2 3 4 5 6 7 8 df2.reindex(index=["1" ,"2" ,"3" ],columns=["1" ,"2" ,"3" ]) df2.head()
1 2 3 4 5 df2.reindex(index=[2 ,3 ,1 ], columns=["diagnosis" ,"id" ,"area_mean" ])
1 2 3 4 5 6 df3=df2.reindex(index=[2 ,3 ,1 ], columns=["diagnosis" ,"id" ,"area_mean" ,"MyNewColumn" ],fill_value=100 ) df3
删除或过滤行列
1 2 3 4 5 6 7 8 9 10 11 import pandas as pddf2 = pd.read_csv('bc_data.csv' ) df2=df2[["id" ,"diagnosis" ,"area_mean" ]] df3 =df2.drop([2 ]).head() df3.head()
下列代码如果前两行没有写,那么反复运行此行代码会报错,原因:df2的当前值一直在发生变化.inplace = True 表示就地修改,数据框本身会改变。axis=0的含义: (1)计算前后的列数不变(2)以列为单位计算(3)逐列计算
1 2 3 4 5 6 7 8 9 10 11 import pandas as pddf2 = pd.read_csv('bc_data.csv' ) df2=df2[["id" ,"diagnosis" ,"area_mean" ]] df2.drop([3 ,4 ], axis=0 , inplace=True ) df2.head()
1 2 3 4 5 6 7 8 9 10 11 import pandas as pddf2 = pd.read_csv('bc_data.csv' ) df2=df2[["id" ,"diagnosis" ,"area_mean" ]] del df2["area_mean" ] df2.head()
1 2 3 4 5 6 7 8 9 10 11 import pandas as pddf2 = pd.read_csv('bc_data.csv' ) df2=df2[["id" ,"diagnosis" ,"area_mean" ]] df2.drop(["id" ,"diagnosis" ], axis=1 , inplace=True ) df2.head()
1 2 3 4 5 6 7 8 9 10 import pandas as pddf2 =pd.read_csv('bc_data.csv' ) df2=df2[["id" ,"diagnosis" ,"area_mean" ]] df2[df2.area_mean> 1000 ].head()
1 2 3 4 5 6 7 df2[df2.area_mean> 1000 ][["id" ,"diagnosis" ]].head()
算术运算 1、规则之一:先补齐行列索引(新增索引对应值为NaN),得到相同结构后,进行计算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 df4=pd.DataFrame(np.arange(6 ).reshape(2 ,3 )) print(df4) df5=pd.DataFrame(np.arange(10 ).reshape(2 ,5 )) print(df5) print(df4+df5)
2、规则之二:用算法运算符+/-/*等,会产生NaN值,如果想修改默认填充的NaN改为指定值,建议不要用运算符,而改用函数,如add,sub,mul,div
1 2 3 4 5 df6=df4.add(df5,fill_value=10 ) df6
3、规则之三、数据框与Series的计算规则:按行(第1轴)广播,先把行改为等长,行内不做循环补齐。只是一行一行计算,不会跨行广播