打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【Python数据分析】第一篇

  IO:导入导出数据

1
2
3
4
5
6
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行数据:

1
df.head()

  通过type(df) 查看df类型  => pandas.core.frame.DataFrame

  查看每一列数据:

1
df['列名']

  通过 type(df['fips']) 得知 => pandas.core.series.Series

  Frame中每一列是个series

  查看某一行数据:

1
2
df.loc[索引]
索引不仅可以是数字,还可以是字符串!

  I/O数据写出:

1
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的行

1
2
3
df.isnull()
df.notnull()

3.替换

1
df.fillna(0)        #统一换成0   数值型,字符型也会替换成0

4.删除

1
df.dropna(0)    # 将含有 NaN 的行删除! (不推荐)

  dataframe与series的属性

1.字典 => series  (key => 索引)

2.字典 => dataframe   需要指定索引!

1
2
3
pd.DataFrame(dict,index=[0])   
pd.DataFrame.from_dict(dict,orient = 'index' )   # 字典中的key 变成索引  , orient:方向

      

   获取行列总数

1
df.shape    # 不包含索引 !

  获取索引

1
df.index    # 返回一个迭代器

  获取列名

1
df.columns

  行列颠倒

1
df.T  # 转制

  切片( 前闭后开 )

1
df[1:5]  # 索引

  选取某列或多列

1
2
3
4
5
6
# 某一列 (填入列名)
df.fips   
df['fips']  (推荐)
# 多列  最外层用[ ] 包含
df[['fips','area_name']]

  增加一列

1
df['xxx'] = None

  重命名某列  返回新数据集! 原始不变

1
2
3
df.rename(columns={"old_lab"="new_lab"})
df.rename(columns={"old_lab"="new_lab"},inplace=True)    # 替换原来数据集

  删除  返回新数据集! 原始不变

1
df.drop('label', axis = 1# axis 轴  0 代表行, 1 列    inplace=True

  计算频次

1
df['arer_name'].value_counts()

  设置索引位

1
dfnew =  df.set_index("area_name")    # 索引位:可以重复,可以为字符串类型

  需要注意这3者区别

1
2
3
4
5
6
7
8
df.loc[1:4]    # 针对索引名称进行操作!
df[1:4]    # 针对索引进行操作!
df.iloc[1:4]    # 针对索引进行操作!
# 切片针对索引进行操作! 具有 前闭后开 属性
# loc 输入的值必须是索引的名称,iloc 输入的是索引的位置

  选取多列

1
2
3
dfnew.loc['Barbour County',['fips','state_abbreviation']]
dfnew.iloc[1:5,:2]

  

  定位

1
2
3
df.loc[ df['area_name'] == 'United States']
df.loc[ df['PST045214'] > 1000000 ]

  赋值

1
df.loc[ df.['area_name'] == 'United States' , 'new_lab'] =0

  加条件判断的赋值

1
2
# 注意括号位置 制定运行顺序!
df.loc[ (df.['PST045214'] >= 100000) & (df.['PST040210'] >= 100000)  , 'labelP' ] =1     

  条件取反赋值

1
df.loc[ ~((df.['PST045214'] >= 100000) & (df.['PST040210'] >= 100000))  , 'labelP' ] =0

  loc 与 iloc 的综合

1
2
3
4
df.ix[ 1:4 ]       
df.ix[ 1:4 , ['fips','area_name'] ]    
# ix是loc与iloc的结合,输入的既可以是名称也可以是位置  (不推荐)

  查询

1
2
3
4
5
6
7
8
9
10
11
12
13
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 支持变量!!

  多重索引

1
movie.set_index(['director_name','movie_title'])

1
movie.set_index(['director_name','movie_title'] , drop= False , append = True) # False 保留作为索引两列  append 添加索引

1
2
3
index.get_level_values(0)    # 获得0层索引
index.get_level_values(1)    # 获得1层索引

  对0层索引操作

1
movie.loc['James Cameron']

  处理多重索引时,先对其进行排序

1
movie.sort_index(inplace= True)

  对多层索引操作

1
2
3
4
5
6
7
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']]

  处理空格

1
movie["movie_title"] = movie["movie_title"].map(lambda s : s.strip(" "))

  查看类型

1
movie.dtypes

  交换索引

1
movie.swaplevel(0,1)

  idx

1
2
3
4
idx = pd.IndexSlice
movie.loc[ idx[ : , 100.0:200.0] ,:]
movie.loc[(slice(None) , slice(100.0 , 200.0 )),:]

  xs()

1
2
3
4
5
movie.xs('James Cameron',level = 0)    # 第0层索引选取
movie.xs('James Cameron',level = 'director_name')
movie.xs((178,'James Cameron'),level = (1,0))

  取反场合

1
2
3
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    # 报错 !

  

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Pandas数据处理方法(包括数据库数据和普通文件数据)
Pandas入门教程
pandas小记:pandas索引和选择
教你如何用50道练习打通Pandas
Python数据分析——Pandas数据结构和操作
利用Python进行数据分析:【Pandas】(Series+DataFrame)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服