数据导入和导出
# 导入 pd.read_csv("z:/data.csv", low_memory=True,encoding="utf-8",sep=",")#读取csv文件内容 pd.read_table(file_name) #从限定分隔符的文本文件导入数据 pd.read_excel(file_name) #从Excel文件导入数据 pd.read_sql(query, connection_object) #从SQL表/库导入数据 pd.read_json(json_string) #从JSON格式的字符串导入数据 pd.read_html(url) #解析URL、字符串或者HTML文件,抽取其中的tables表格 pd.DataFrame(dict) #从字典对象导入数据,Key是列名,Value是数 # 导出 df.to_csv("z:/data_new.csv", index=False) #不保存行索引,默认行列索引True df.to_excel(filename) #导出数据到Excel文件 df.to_sql(table_name, connection_object) #导出数据到SQL表 df.to_json(filename) #以Json格式导出数据到文本文件
显示数据内容
df.head(n) # 前n行数据,默认5 df.tail(n) # 后n行数据,默认5 df.shape() # 形状 df.info() # 显示索引、数据类型和内存信息 df.describe() # 显示数值型列的汇总统计 df.columns.values # 显示所有列名称(值) df.columns.tolist() # 显示所有列名称(列表形式) # set_option pd.set_option('display.max_columns', None) #显示所有列(不忽略) pd.set_option('display.max_rows', None) #显示所有行(不忽略) pd.set_option('chop_threshold', 0.5) # 绝对值小于0.5的显示0.0 pd.set_option('colheader_justify', 'left')#显示居中还是左边 pd.set_option('precision', 5) #显示小数点后的位数 pd.set_option('expand_frame_repr', False)#True就是可以换行显示 pd.set_option('display.width', 200) #横向最多显示多少个字符
创建数据
pd.DataFrame(np.random.rand(200,10)) #创建200行10列的随机0-1之间的数组成的DataFrame对象 pd.Series(list) #从可迭代Series对象
统计
df.value_counts(sort=True)) #统计该字段的唯一内容数量 df.describe() #查看数据值列的汇总统计 df.mean() #所有列的均值 df.corr() #列与列之间的相关系数 df.count() #每一列中的非空值的个数 df.max() #每一列的最大值 df.min() #每一列的最小值 df.median() #每一列的中位数 df.std() #每一列的标准差
数据切分与合并
# 切分 df[col] #根据列名,并以Series的形式返回列 df[[col1, col2]] #以DataFrame形式返回多列 df.iloc[0,:] #第一行 df.iloc[:,0] #第一列 df.iloc[:,:100] #前100列 df.iloc[0,0] #第一列的第一个元素 # 合并 df1.append(df2) #将df2中的行添加到df1的尾部 pd.concat([df1, df2],axis=1) #将df2中的列添加到df1的尾部
筛选
df[["year","month","day"]] # 筛选年月日三个列 df.loc[df["year"] > 2014] # 筛选2014年后的数据
数据类型
df_loan['int_rate'].round(0).astype(int)
日期操作
# 日期转换(Dec-2019==>2019-12) df['year'] = pd.to_datetime(df["date"]).dt.year df['month'] = pd.to_datetime(df["date"]).dt.month df['day'] = pd.to_datetime(df["date"]).dt.day
分组操作
df.groupby(col) #对指定列分组 df.groupby([col1,col2]) #多列进行分组 df.groupby(col1)[col2] #对col1进行分组后,列col2进行均值 df.groupby(["issue_year", "issue_month"]).size() # df.groupby(["issue_month", "issue_year"]).mean() df.groupby(['issue_year', 'loan_condition']).int_rate.mean() df_loan.groupby("sub_grade")['int_rate'].count().index df.sort_values(col) #按指定列排序数据,默认升序排序 ascending=False降序 df.sort_values([col1,col2], ascending=[True,False]) #先按列col1升序排列,后按col2降序排列数据 df.groupby(col1).agg(np.mean) #按列coll分组的所有列的均值
增删改查操作
# 修改列的名称 df.columns = ['a','b','c'] df = df.rename(columns={"A": "a", "B": "b"},inplace=True) # 删除 df.drop(["total_bal_ex_mort", 'tot_coll_amt', 'sub_grade'], axis=1, inplace=True) # 删除指定 df = df[~ df['issue_d'].str.contains('issue_d')] # 删除指定内容的行 df = df.loc[df["issue_d"] != "issue_d"] # 删除指定内容的行
数据清洗
# 查看那些列全空值 nan_mean = df.isna().mean() nan_mean = nan_mean[nan_mean != 0].sort_values() print(nan_mean) # 查看缺省 check_null = df.isnull().sum().sort_values(ascending=False)/float(len(df)) print(check_null[check_null > 0.2]) # 查看缺省比例大于0.2 # 缺失值处理 print(pd.isnull(df)) # 缺失值True,其他False print(np.any(pd.isnull(df))) # 有缺失值True,没有False print(np.all(pd.notnull(df))) # 没有缺失True,有False print(pd.isnull(df).any()) # 每列是否有缺失 print(pd.notnull(df).all()) # 每列没有缺失 print(df.dropna()) # 删除所有的缺失值 print(df.fillna("NULL")) # 替换NULL # 替换 data_new = df.replace("?",value=np.nan) print(data_new.dropna()) # 去重 df.drop_duplicates()