【Python数据分析】第一篇--基础操作
IO:导入导出数据
import pandas as pd df = pd.read_csv(filepath_or_buffer, sep=',', header='infer', index_col=None, names=None, na_values=None, error_bad_lines=True, parse_dates=False) sep 分隔符,csv文件,默认是逗号 , header 是否导入第一行为列名 否则填None
查看前5行数据:
df.head()
通过type(df) 查看df类型 => pandas.core.frame.DataFrame
查看每一列数据:
df['列名']
通过 type(df['fips']) 得知 => pandas.core.series.Series
Frame中每一列是个series
查看某一行数据:
df.loc[索引] 索引不仅可以是数字,还可以是字符串!
I/O数据写出:
DataFrame.to_csv(path_or_buf=None, sep=', ', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None, compression=None, quoting=None, quotechar='"', line_terminator='\n', chunksize=None, tupleize_cols=False, date_format=None, doublequote=True, escapechar=None, decimal='.', **kwds)
读取报错处理:
1.先把数据文本转换成utf-8 文本
2.error_bad_lines = False 默认True 出现错误,报错
3.encoding = 'gbk'
Missing Value (NaN) 需要优先处理
1.针对数值型!
2.查看Missing Value的行
df.isnull() df.notnull()
3.替换
df.fillna(0) #统一换成0 数值型,字符型也会替换成0
4.删除
df.dropna(0) # 将含有 NaN 的行删除! (不推荐)
dataframe与series的属性
1.字典 => series (key => 索引)
2.字典 => dataframe 需要指定索引!
pd.DataFrame(dict,index=[0]) pd.DataFrame.from_dict(dict,orient = 'index' ) # 字典中的key 变成索引 , orient:方向
获取行列总数
df.shape # 不包含索引 !
获取索引
df.index # 返回一个迭代器
获取列名
df.columns
行列颠倒
df.T # 转制
切片( 前闭后开 )
df[1:5] # 索引
选取某列或多列
# 某一列 (填入列名) df.fips df['fips'] (推荐) # 多列 最外层用[ ] 包含 df[['fips','area_name']]
增加一列
df['xxx'] = None
重命名某列 返回新数据集! 原始不变
df.rename(columns={"old_lab"="new_lab"}) df.rename(columns={"old_lab"="new_lab"},inplace=True) # 替换原来数据集
删除 返回新数据集! 原始不变
df.drop('label', axis = 1) # axis 轴 0 代表行, 1 列 inplace=True
计算频次
df['arer_name'].value_counts()
设置索引位
dfnew = df.set_index("area_name") # 索引位:可以重复,可以为字符串类型
需要注意这3者区别
df.loc[1:4] # 针对索引名称进行操作! df[1:4] # 针对索引进行操作! df.iloc[1:4] # 针对索引进行操作! # 切片针对索引进行操作! 具有 前闭后开 属性 # loc 输入的值必须是索引的名称,iloc 输入的是索引的位置
选取多列
dfnew.loc['Barbour County',['fips','state_abbreviation']] dfnew.iloc[1:5,:2]
定位
df.loc[ df['area_name'] == 'United States'] df.loc[ df['PST045214'] > 1000000 ]
赋值
df.loc[ df.['area_name'] == 'United States' , 'new_lab'] =0
加条件判断的赋值
# 注意括号位置 制定运行顺序! df.loc[ (df.['PST045214'] >= 100000) & (df.['PST040210'] >= 100000) , 'labelP' ] =1
条件取反赋值
df.loc[ ~((df.['PST045214'] >= 100000) & (df.['PST040210'] >= 100000)) , 'labelP' ] =0
loc 与 iloc 的综合
df.ix[ 1:4 ] df.ix[ 1:4 , ['fips','area_name'] ] # ix是loc与iloc的结合,输入的既可以是名称也可以是位置 (不推荐)
查询
df.query("PST045214 > 100000 & PST040210 > 100000 ") df.query("state_abbreviation == 'AL' ") # 注意 如果使用字符串进行比较 ,,要用单引号! ***************** num = 100000 df.query("PST045214 > num & PST040210 > num ") # 报错!, query 不支持变量!! ***************** num = 1000000 df.loc[ df['PST045214'] > num ] # loc 支持变量!!
多重索引
movie.set_index(['director_name','movie_title'])
movie.set_index(['director_name','movie_title'] , drop= False , append = True) # False 保留作为索引两列 append 添加索引
index.get_level_values(0) # 获得0层索引 index.get_level_values(1) # 获得1层索引
对0层索引操作
movie.loc['James Cameron']
处理多重索引时,先对其进行排序
movie.sort_index(inplace= True)
对多层索引操作
movie.loc[(slice(None) , 178.0) ,:] # 逗号不可去掉, movie.loc[(slice(None) , slice(178.0 , 200.0 )) ,:] movie.loc[(slice(None) , slice(178.0 , 200.0 )) , ['color','genres']] movie.loc[ (['James Cameron','Gore Verbinski'] , slice(178.0 , 200.0 )),['color','genres']]
处理空格
movie["movie_title"] = movie["movie_title"].map(lambda s : s.strip(" "))
查看类型
movie.dtypes
交换索引
movie.swaplevel(0,1)
idx
idx = pd.IndexSlice movie.loc[ idx[ : , 100.0:200.0] ,:] movie.loc[(slice(None) , slice(100.0 , 200.0 )),:]
xs()
movie.xs('James Cameron',level = 0) # 第0层索引选取 movie.xs('James Cameron',level = 'director_name') movie.xs((178,'James Cameron'),level = (1,0))
取反场合
movie.loc[ (['James Cameron','Jon Gunn'] , slice(100.0 , 200.0 )),"new_lab"] = 1 movie.loc[~( (['James Cameron','Jon Gunn'] , slice(100.0 , 200.0 ))),"new_lab"] = 1 # 报错 !