关于python数据科学相关的知识笔记
Python数据分析可视化笔记·
jupyter lab好东西集合·
https://www.cnblogs.com/feffery/p/13364668.html
pandas基本操作和概念·
DataFrame
对象单独取出一行即:df.loc[0]
和一列df["a"]
都是Series
对象
1 2 3 4 import nunpy as npimport pandas as pddf.columns df.index
创建DataFrame对象·
最简单也最好用:根据两个列表创建
1 2 3 4 5 6 7 index=[i for i in range(100 )] columns=["a" ,"b" ] df=pd.DataFrame(index=index,columns=columns) l1=[i for i in range(100 )] l2=[1 ,2 ] df["a" ]=l1 df.loc[0 ]=l2
数据分析6步·
一、读取数据·
1 2 3 4 5 6 7 import pandas as pdimport numpy as nppd.read_excel("1.xlsx" ,) pd.read_csv("1.csv" ) pd.read_excel? pd.*read*?
二、清洗数据·
查找异常·
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 pd.set_option('max_rows' , 10 ) df[df["a" ].isnull()] df[df.duplicated()] df[df.编号.duplicated()] df.a.unique() df[df.a.isin(['30' ])] df[df.a.str.contains("abc" ,na=False )] df[df.a.between(1 , 5 )] df[(df.a >= 1 ) & (df.b <= 5 )]
排除重复·
1 2 3 df.drop_duplicates() df.drop_duplicates(inplace=True ) df.drop_duplicates(['a' ])
删除缺失值·
1 2 3 color.dropna() color.dropna(how='all' ) color.dropna(axis=1 )
补全缺失值·
1 2 3 df.fillna('a' ) df.fillna(method='bfill' ) df.fillna( {'花⾊' : 0 , '牌⾯' : 1 } )
完整例子·
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import numpy as npimport pandas as pdpd.set_option('max_rows' , 10 ) df = pd.read_excel('待清洗的扑克牌数据集.xlsx' ,sheet_name="name" ) df = df.fillna('Joker' ) df = df.drop_duplicates() df.loc[4 , '牌⾯' ] = 3 df = df.append({'编号' : 4 ,'花⾊' : '⿊桃♠' ,'牌⾯' : 2 },ignore_index=True ) df = df.sort_values('编号' ) df = df.reset_index() df = df.drop(['index' ], axis=1 ) df.to_excel('完成清洗的扑克牌数据.xlsx' ,index=False ) df
三、操作数据·
增加数据·
1 2 3 4 5 6 7 8 df["b" ]=[i for i in range(100 )] df.insert(1 , 'a' , [1 , 2 ]) a=pd.DataFrame({"a" :1 ,"b" :2 }) df2=df.append(a,ignore_index=True ,sort=False ) pd.concat([df, a],ignore_index=True ,sort=False ) 还有merge()/join()函数
删除数据·
1 2 3 df.drop([0 ,2 ]) df.drop("a" ,axis=1 ) del df2["a" ]
修改数据·
1 2 3 4 5 df.replace(["1" ,"2" ,3 ,4 ],"" ,regex=True ) df.loc[0 ,"a" ]="j" df.columns = list('AB' ) df.rename({"a" :"b" },axis=1 ) df.rename({1 :3 ,2 :3 })
查询数据·
1 2 3 4 5 6 7 8 9 10 11 12 df.head() import redf[df.a.str.match('[jk]' , flags=re.IGNORECASE, na=False )] df.query( '1 <= index <= 5 \ and 牌⾯ not in @card ' ) df.query( '编号 > 编号.mean() \ and 牌⾯ == "A" ' )
四、数据转换·
转换为时间·
1 2 3 from dateutil.parser import parsedf["time" ]=df.Date.transform(parse).copy() parse("10/9/2019" ,dayfirst=True )
转换为数值·
1 2 pd.to_numeric(errors='coerce' ) df.apply(pd.to_numeric,errors='coerce' )
类型转换·
1 2 df.astype(str).dtypes 对于时间型的数据,我们可以使⽤ strftime() 函数
转换为区间·
1 2 3 4 pd.cut() bins=[float("-inf" ),280 ,float("inf" )] pd.cut(df.a,bins=bins,right=True ) pd.cut(df.a,bins=2 )
分组转换·
1 2 3 4 5 6 7 df.groupby("a" )["b" ].transform(sum) df.groupby("a" )["b" ].apply(sum) df.groupby("a" )["b" ].agg([sum,np.mean,"count" ]) df.groupby("month" ).agg( 天数=("Date" ,count), 平均价格=("Open" ,np.mean))
标准化·
1 2 (df.a-df.a.min())/(df.a.max()-df.a.min())
五、整理数据·
外连接(相当于并集)·
1 df.merge(df1,how="outer" ,on="用于连接的列名" )
内连接(相当于交集)·
左连接与右连接·
1 df.merge(df1,how="left" )
交叉连接·
1 2 3 4 5 操作: (1 )⽤ assign() 函数增加 key 列; (2 )⽤ merge() 函数进⾏连接; (3 )删掉 key 列。 df.assign(key=1 ).merge(df1.assign(key=1 ),on="key" ).drop("key" ,1 )
联合拼接·
1 pd.concat([df1,df2],sort=False )
六、分析数据·
比较nb的三个数据分析库
参考文章:https://my.oschina.net/u/4581316/blog/4898542
pandas_profiling·
1 2 3 4 5 import pandas_profilingimport seaborn as snssns.set_style("whitegrid" ,{"font.sans-serif" :["simhei" ,"Arial" ]}) x=pandas_profiling.ProfileReport(df) x.to_file("name.html" )
Sweetviz·
1 2 3 import sweetviz as svmy_report = sv.analyze(mpg) my_report.show_html()
pandasGUI·
1 2 3 from pandasgui import showgui = show(mpg)
可视化·
pyecharts·
官网:https://pyecharts.org/#/zh-cn/intro