Pandas高级
日期处理
# 需要的模块import timefrom datetime import datetimefrom datetime import timedelta# 获取当前时间now=datetime.now()# 获取 now 的年月日now.date()# 获取 now 的年月日now.time()# 时间戳time.time()# 将当前时间格式化显示now.strftime(\'%Y-%m-%d %H:%M:%S %A %j\')strftime()时间日期格式化符号%y 两位数的年份表示%Y 四位数的年份表示%m 月份%d 月内中的一天%H 24小时制小时数%I 12小时制小时数%M 分钟数%S 秒%j 年内的一天# 字符串格式转化为日期格式time_str= \'北京时间:2020-08-08 09:10:20\'datetime.strptime(time_str,\'北京时间:%Y-%m-%d %H:%M:%S\')# 日期是可以做减法的 比如:time1=datetime(2020,8,23)time2=datetime(2020,6,9)time1-time2结果返回的是:datetime.timedelta(days=75)
合并数据集
pd.merge()合并两个DataFrame参数left要连接的左边的数据right要连接的右边的数据how连接方式(默认inner)\'left\', \'right\', \'outer\', \'inner\'on默认按相同列名称合并,可以用on指定可以多列合并,on=[\'key1\',\'key2\']left_on / right_on没有相同的列,可以用left_on=\'\' right_on=\'\'pd.concat()合并两个Series参数axis: 0:横向连接1:纵向连接join:连接方式(默认:outer)ignore_index: (清除索引,默认不清除)keys:将原参与合并的数据进行标记,标记后会形成多层索引names:给生成的索引取个名称pd.combine_first()以左边非nan为主如果左边的值是nan右边不是,用右边的左边索引上没有的用右边combine()# 保留合并的最大值/最小值
print(df5.combine(df6,func= np.maximum ))
print(df5.combine(df6,func= np.minimum ))
重塑和轴的选择
多重索引index=[list(\'aaaabbbccc\'.upper()),[f\'编号{i}\' for i in range(1,11)]]index=[[\'武器\']*5+[\'法宝\']*5,list(\'aaaabbbccc\'.upper()),[f\'编号{i}\' for i in range(1,11)]]stack()将列索引转会行索引unstack()将行索引转为列索引默认将最内层的行索引转为列索引
函数映射和替换值
unique()对一个Series取唯一的值duplicated()返回一个是否是重复数据的布尔虚空序列~:非在读取一次可以将重复的取出来value_counts()对值计数Series.drop_duplicates()丢掉重复值(默认保留第一个)DataFrame.drop_duplicates()subset = [列1,列2,...]默认所有列相同丢掉keep=\'first\' 保留第一个inplace = \'False\' 不在原值replace()替换值xxx.replace([-999,-1000],[666,400])xxx.replace({-999:666,-1000:777})
数据拆分/异常值筛选和过滤
pd.cut根据区间,求数量,结合值统计 value_counts()x被分割的值bins分箱,可以是数字也可以是list-like的分箱right默认右边闭合,False左边闭合labels给区间起个名字,让值统计更直观retbins默认False, 为True,返回一个区间数组precision默认精度到小数点后三位include_lowest默认False 分割区间,默认不包含最小值,True包含duplicates重复的 默认保留重复值ordered是否排序 默认排序pd.qcut根据数量,求区间,结合值统计 value_counts()X被分割的值q可以是整数等分子主题 4np.sign()取每个数的符号位
读取与写入文件
pd.read_csv()读取csv文件sep以什么符号分隔(默认 , )可以用正则表达式header读取没有明显名称的文件,不需要让首行作为列,用参数header=None指定行数做列名names自定义读取列名称给几个列,就会从最后向前读几列数据,剩下的都是index超出都是nanindex_col给行索引设置个名字skiprows跳过某一行comment表示一个字符在这一行出现就不要na_values需要读取xxx值为nanpd.to_csv()把想存的数据直接调用 to_csv ,就能存进去encoding:指定编码import syssys.stdout:预览to_excel存excel需要调用openpyxl模块read_excel同读取csv参数 多了个sheet_name
数据聚合与分组计算
groupby()按照某个Series 进行分组,返回一个分组后的对象,可以用list()转换查看结构,可以知道分组对象的每个值,分组依据和分组结果参数by按哪一列分组axis按横轴还是纵轴分可以直接使用聚合函数 例如: sum(),mean()
分组计算/apply/透视表
head()取前面几行 默认5行tail()取后面几行copy()复制数据apply()应用一个函数margins添加个人小计
Matplotlib入门
折线图
plt.plot()xx轴坐标yy轴坐标color折线颜色linewidth线条宽度\'go--\'颜色 点位 线条风格markersize点的大小marker点位的形状linestyle线条风格
柱形图/条形图
plt.bar()xx轴坐标yy轴坐标color柱的颜色plt.barh()参数和柱形图一样
直方图
plt.histrwidth每个柱子之间的宽度histtype设置直方图类型
饼状图
plt.pie()startangle起始角度colors颜色labels设置每个扇形图名字shadow阴影explode往出拉点explode=(0,0,0,0.2)autopct=\'%.2f%%\'占整体的百分比labeldistancelabel距离圆心的距离radius基于默认值大的倍数
散点图
plt.scatter()xx轴坐标yy轴坐标s设置点大小c设置点颜色marker设置点形状