当前位置: 首页 > article >正文

【转载】pandas 的速查表

作者不了哭来源知乎著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。Pandas 是一个强大的分析结构化数据的工具集它的使用基础是 Numpy提供高性能的矩阵运算用于数据挖掘和数据分析同时也提供数据清洗功能。本文收集了 Python 数据分析库 Pandas 及相关工具的日常使用方法备查持续更新中。缩写说明df任意的 Pandas DataFrame 对象s任意的 Pandas Series 对象注有些属性方法 df 和 s 都可以使用推荐资源pandas 在线教程 https://www.gairuo.com/p/pandas-tutorial书籍 《深入浅出Pandas利用Python进行数据处理与分析》环境搭建# https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ # https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ # https://docs.conda.io/en/latest/miniconda.html # excel 处理相关包 xlrd / openpyxl / xlsxwriter # 解析网页包 requests / lxml / html5lib / BeautifulSoup4 # 计算包scipy pip install jupyter pandas matplotlib # 国外网络慢可指定国内源快速下载安装 pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simpleConda 多 Python 版本环境# 创建新环境环境名称, python 版本 conda create -n py39 python3.9 # 删除环境 conda remove -n py39 --all # 进入、激活环境 conda activate py39 # 退出环境 conda deactivate # 查看所有虚拟环境及当前环境 conda info -eJupyter Notebook 快捷键启动 Jupyter Notebookjupyter notebook导入库包import pandas as pd # 最新版 (2022-02-12) import numpy as np import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline导入数据# 从 CSV 文件导入数据 pd.read_csv(file.csv, name[列名,列名2]) # 从限定分隔符的文本文件导入数据 pd.read_table(filename, header0) # Excel 导入指定 sheet 和表头 pd.read_excel(file.xlsx, sheet_name 表1, header0) # 从 SQL 表/库导入数据 pd.read_sql(query, connection_object) # 从 JSON 格式的字符串导入数据 pd.read_json(json_string) # 解析 URL、字符串或者 HTML 文件抽取其中的 tables 表格 pd.read_html(url) # 从你的粘贴板获取内容并传给 read_table() pd.read_clipboard() # 从字典对象导入数据Key 是列名Value是数据 pd.DataFrame(dict) # 导入字符串 from io import StringIO pd.read_csv(StringIO(web_data.text))导出输出数据# 导出数据到CSV文件 df.to_csv(filename.csv) # 导出数据到Excel文件 df.to_excel(filename.xlsx, indexTrue) # 导出数据到 SQL 表 df.to_sql(table_name, connection_object) # 以Json格式导出数据到文本文件 df.to_json(filename) # 其他 df.to_html() # 显示 HTML 代码 df.to_markdown() # 显示 markdown 代码 df.to_string() # 显示格式化字符 df.to_latex(indexFalse) # LaTeX tabular, longtable df.to_dict(split) # 字典, 格式 list/series/records/index df.to_clipboard(sep,, indexFalse) # 存入系统剪贴板 # 将两个表格输出到一个excel文件里面,导出到多个 sheet writerpd.ExcelWriter(new.xlsx) df_1.to_excel(writer,sheet_name第一个, indexFalse) df_2.to_excel(writer,sheet_name第二个, indexFalse) writer.save() # 必须运行writer.save()不然不能输出到本地 # 写法2 with pd.ExcelWriter(new.xlsx) as writer: df1.to_excel(writer, sheet_name第一个) df2.to_excel(writer, sheet_name第二个) # 用 xlsxwriter 导出支持合并单元格、颜色、图表等定制功能 # https://xlsxwriter.readthedocs.io/working_with_pandas.html创建测试对象# 创建20行5列的随机数组成的 DataFrame 对象 pd.DataFrame(np.random.rand(20,5)) # 从可迭代对象 my_list 创建一个 Series 对象 pd.Series(my_list) # 增加一个日期索引 df.index pd.date_range(1900/1/30, periodsdf.shape[0]) # 创建随机数据集 df pd.util.testing.makeDataFrame() # 创建随机日期索引数据集 df pd.util.testing.makePeriodFrame() df pd.util.testing.makeTimeDataFrame() # 创建随机混合类型数据集 df pd.util.testing.makeMixedDataFrame()查看、检查、统计、属性df.head(n) # 查看 DataFrame 对象的前n行 df.tail(n) # 查看 DataFrame 对象的最后n行 df.sample(n) # 查看 n 个样本随机 df.shape # 查看行数和列数 df.info() # 查看索引、数据类型和内存信息 df.describe() # 查看数值型列的汇总统计 df.dtypes # 查看各字段类型 df.axes # 显示数据行和列名 df.mean() # 返回所有列的均值 df.mean(1) # 返回所有行的均值下同 df.corr() # 返回列与列之间的相关系数 df.count() # 返回每一列中的非空值的个数 df.max() # 返回每一列的最大值 df.min() # 返回每一列的最小值 df.median() # 返回每一列的中位数 df.std() # 返回每一列的标准差 df.var() # 方差 s.mode() # 众数 s.prod() # 连乘 s.cumprod() # 累积连乘,累乘 df.cumsum(axis0) # 累积连加,累加 s.nunique() # 去重数量不同值的量 df.idxmax() # 每列最大的值的索引名 df.idxmin() # 最小 df.columns # 显示所有列名 df.team.unique() # 显示列中的不重复值 # 查看 Series 对象的唯一值和计数, 计数占比: normalizeTrue s.value_counts(dropnaFalse) # 查看 DataFrame 对象中每一列的唯一值和计数 df.apply(pd.Series.value_counts) df.duplicated() # 重复行 df.drop_duplicates() # 删除重复行 # set_option、reset_option、describe_option 设置显示要求 pd.get_option() # 设置行列最大显示数量None 为不限制 pd.options.display.max_rows None pd.options.display.max_columns None df.col.argmin() # 最大值[最小值 .argmax()] 所在位置的自动索引 df.col.idxmin() # 最大值[最小值 .idxmax()] 所在位置的定义索引 # 累计统计 ds.cumsum() # 前边所有值之和 ds.cumprod() # 前边所有值之积 ds.cummax() # 前边所有值的最大值 ds.cummin() # 前边所有值的最小值 # 窗口计算(滚动计算) ds.rolling(x).sum() #依次计算相邻x个元素的和 ds.rolling(x).mean() #依次计算相邻x个元素的算术平均 ds.rolling(x).var() #依次计算相邻x个元素的方差 ds.rolling(x).std() #依次计算相邻x个元素的标准差 ds.rolling(x).min() #依次计算相邻x个元素的最小值 ds.rolling(x).max() #依次计算相邻x个元素的最大值数据清理df.columns [a,b,c] # 重命名列名 df.columns df.columns.str.replace( , _) # 列名空格换下划线 df.loc[df.AAA 5, [BBB, CCC]] 555 # 替换数据 df[pf] df.site_id.map({2: 小程序, 7:M 站}) # 将枚举换成名称 pd.isnull() # 检查DataFrame对象中的空值并返回一个 Boolean 数组 pd.notnull() # 检查DataFrame对象中的非空值并返回一个 Boolean 数组 df.drop([name], axis1) # 删除列 df.drop([0, 10], axis0) # 删除行 del df[name] # 删除列 df.dropna() # 删除所有包含空值的行 df.dropna(axis1) # 删除所有包含空值的列 df.dropna(axis1,threshn) # 删除所有小于 n 个非空值的行 df.fillna(x) # 用x替换DataFrame对象中所有的空值 df.fillna(value{prov:未知}) # 指定列的空值替换为指定内容 s.astype(float) # 将Series中的数据类型更改为 float 类型 df.index.astype(datetime64[ns]) # 转化为时间格式 s.replace(1, one) # 用 ‘one’ 代替所有等于 1 的值 s.replace([1, 3],[one,three]) # 用one代替 1用 three 代替 3 df.rename(columnslambda x: x 1) # 批量更改列名 df.rename(columns{old_name: new_name}) # 选择性更改列名 df.set_index(column_one) # 更改索引列 df.rename(indexlambda x: x 1) # 批量重命名索引 # 重新命名表头名称 df.columns [UID, 当前待打款金额, 认证姓名] df[是否设置提现账号] df[状态] # 复制一列 df.loc[:, ::-1] # 列顺序反转 df.loc[::-1] # 行顺序反转, 下方为重新定义索引 df.loc[::-1].reset_index(dropTrue)数据处理Filter、Sort# 保留小数位四舍六入五成双 df.round(2) # 全部 df.round({A: 1, C: 2}) # 指定列 df[Name] df.Name # 取列名的两个方法 df[df.index Jude] # 按索引查询要用 .index df[df[col] 0.5] # 选择col列的值大于0.5的行 # 多条件查询 df[(df[team] A) ( df[Q1] 80) df.utype.isin([老客, 老访客])] # 筛选为空的内容 df[df.order.isnull()] # 类似 SQL where in df[df.team.isin(A,B)] df[(df.teamB) (df.Q1 17)] df[~(df[team] A) | ( df[Q1] 80)] # 非或 df[df.Name.str.contains(张)] # 包含字符 df.sort_values(col1) # 按照列col1排序数据默认升序排列 df.col1.sort_values() # 同上, - s df.sort_values(col2, ascendingFalse) # 按照列 col1 降序排列数据 # 先按列col1升序排列后按col2降序排列数据 df.sort_values([col1,col2], ascending[True,False]) df2 pd.get_dummies(df, prefixt_) # 将枚举的那些列带枚举转到列上 s.set_index().plot() # 多索引处理 dd.set_index([utype, site_id, p_day], inplaceTrue) dd.sort_index(inplaceTrue) # 按索引排序 dd.loc[新访客, 2, 2019-06-22].plot.barh() # loc 中按顺序指定索引内容 # 前100行, 不能指定行如df[100] df[:100] # 只取指定行 df1 df.loc[0:, [设计师ID, 姓名]] # 将ages平分成5个区间并指定 labels ages np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) pd.cut(ages, [0,5,20,30,50,100], labels[u婴儿,u青年,u中年,u壮年,u老年]) daily_index.difference(df_work_day.index) # 取出差别 # 格式化 df.index.name # 索引的名称 str df.columns.tolist() df.values.tolist() df.总人口.values.tolist() data.apply(np.mean) # 对 DataFrame 中的每一列应用函数 np.mean data.apply(np.max,axis1) # 对 DataFrame 中的每一行应用函数 np.max df.insert(1, three, 12, allow_duplicatesFalse) # 插入列 (位置、列名、[值]) df.pop(class) # 删除列 # 增加一行 df.append(pd.DataFrame({one:2, two:3, three: 4.4}, index[f]), sortTrue) # 指定新列 iris.assign(sepal_ratioiris[SepalWidth] / iris[SepalLength]).head() df.assign(ratelambda df: df.orders/df.uv) # shift 函数是对数据进行平移动的操作 df[增幅] df[国内生产总值] - df[国内生产总值].shift(-1) df.tshift(1) # 时间移动按周期 # 和上相同diff 函数是用来将数据进行移动之后与原数据差 # 异数据等于 df.shift()-df df[增幅] df[国内生产总值].diff(-1) # 留存数据因为最大一般为数据池 df.apply(lambda x: x/x.max(), axis1) # 取 best 列中值为列名的值写到 name 行上 df[value] df.lookup(df[name], df[best]) s.where(s 1, 10) # 满足条件下数据替换10空为 NaN s.mask(s 0) # 留下满足条件的其他的默认为 NaN # 所有值加 1 (加减乘除等) df 1 / df.add(1) # 管道方法链式调用函数f(df)df.pipe(f) def gb(df, by): result df.copy() result result.groupby(by).sum() return result # 调用 df.pipe(gb, byteam) # 窗口计算 2s 为两秒 df.rolling(2).sum() # 在窗口结果基础上的窗口计算 df.expanding(2).sum() # 超出大于、小于的值替换成对应值 df.clip(-4, 6) # AB 两列想加增加 C 列 df[C] df.eval(AB) # 和上相同效果 df.eval(C A B, inplaceTrue) # 数列的变化百分比 s.pct_change(periods2) # 分位数, 可实现时间的中间点 df.quantile(.5) # 排名 average, min,max,firstdense, 默认 average s.rank() # 数据爆炸将本列的类列表数据和其他列的数据展开铺开 df.explode(A) # 枚举更新 status {0:未执行, 1:执行中, 2:执行完毕, 3:执行异常} df[taskStatus] df[taskStatus].apply(status.get) df.assign(金额0) # 新增字段 df.loc[(bar, two), A] # 多索引查询 df.query(i0 b i1 b) # 多索引查询方法 2 # 取多索引中指定级别的所有不重复值 df.index.get_level_values(2).unique() # 去掉为零小数12.00 - 12 df.astype(str).applymap(lambda x: x.replace(.00, )) # 插入数据在第三列加入「两倍」列 df.insert(3, 两倍, df[值]*2) # 枚举转换 df[gender] df.gender.map({male:男, female:女}) # 增加本行之和列 df[Col_sum] df.apply(lambda x: x.sum(), axis1) # 对指定行进行加和 col_list list(df)[2:] # 取请假范围日期 df[总天数] df[col_list].sum(axis1) # 计算总请假天数 # 对列求和汇总 df.loc[col_sum] df.apply(lambda x: x.sum()) # 按指定的列表顺序显示 df.reindex(order_list) # 按指定的多列排序 df.reindex([col_1, col_5], axiscolumns)数据选取df[col] # 根据列名并以Series的形式返回列 df[[col1, col2]] # 以DataFrame形式返回多列 df.loc[df[team] B,[name]] # 按条件查询只显示name 列 s.iloc[0] # 按位置选取数据 s.loc[index_one] # 按索引选取数据 df.loc[0,A:B] # A到 B 字段的第一行 df.loc[2018:1990, 第一产业增加值:第三产业增加值] df.loc[0,[A,B]] # d.loc[位置切片, 字段] df.iloc[0,:] # 返回第一行, iloc 只能是数字 df.iloc[0,0] # 返回第一列的第一个元素 dc.query(site_id 8 and utype老客).head() # 可以 and or / | # 迭代器及使用 for idx,row in df.iterrows(): row[id] # 迭代器对每个元素进行处理 df.loc[i,链接] fhttp://www.gairuo.com/p/{slug}.html for i in df.Name:print(i) # 迭代一个列 # 按列迭代[列名, 列中的数据序列 S索引名 值)] for label, content in df.items():print(label, content) # 按行迭代迭代出整行包括索引的类似列表的内容可row[2]取 for row in df.itertuples():print(row) df.at[2018, 总人口] # 按行列索引名取一个指定的单个元素 df.iat[1, 2] # 索引和列的编号取单个元素 s.nlargest(5).nsmallest(2) # 最大和最小的前几个值 df.nlargest(3, [population, GDP]) df.take([0, 3]) # 指定多个行列位置的内容 # 按行列截取掉部分内容支持日期索引标签 ds.truncate(before2, after4) # 将 dataframe 转成 series df.iloc[:,0] float(str(val).rstrip(%)) # 百分数转数字 df.reset_index(inplaceTrue) # 取消索引数据处理 GroupBy 透视df.groupby(col) # 返回一个按列col进行分组的Groupby对象 df.groupby([col1,col2]) # 返回一个按多列进行分组的Groupby对象 df.groupby(col1)[col2] # 返回按列col1进行分组后列col2的均值 # 创建一个按列col1进行分组并计算col2和col3的最大值的数据透视表 df.pivot_table(indexcol1, values[col2,col3], aggfuncmax, as_indexFalse) # 同上 df.pivot_table(index[site_id, utype], values[uv_all, regist_num], aggfunc[max, mean]) df.groupby(col1).agg(np.mean) # 返回按列col1分组的所有列的均值 # 按列将其他列转行 pd.melt(df, id_vars[day], var_namecity, value_nametemperature) # 交叉表是用于统计分组频率的特殊透视表 pd.crosstab(df.Nationality,df.Handedness) # groupby 后排序分组 agg 内的元素取固定个数 ( df[(df.p_day 20190101)] .groupby([p_day, name]) .agg({uv:sum}) .sort_values([p_day,uv], ascending[False, False]) .groupby(level0).head(5) # 每天取5个页面 .unstack() .plot() ) # 合并查询经第一个看max, min, last, size:数量 df.groupby(结算类型).first() # 合并明细并分组统计加总max, mean, median, # prod, sum, std,var, nunique,nunique为去重的列表 df1 df.groupby(by设计师ID).agg({结算金额:sum}) df.groupby(bydf.pf).ip.nunique() # groupby distinct, 分组去重数 df.groupby(bydf.pf).ip.value_counts() # groupby 分组去重的值及数量 df.groupby(name).agg([sum, median, count])数据合并# 合并拼接行 # 将df2中的行添加到df1的尾部 df1.append(df2) # 指定列合并成一个新表新列 ndf (df[提名1] .append(df[提名2], ignore_indexTrue) .append(df[提名3], ignore_indexTrue)) ndf pd.DataFrame(ndf, columns([姓名])) # 将df2中的列添加到df1的尾部 df.concat([df1, df2], axis1) # 合并文件的各行 df1 pd.read_csv(111.csv, sep\t) df2 pd.read_csv(222.csv, sep\t) excel_list [df1, df2] # result pd.concat(excel_list).fillna()[:].astype(str) result pd.concat(excel_list)[] result.to_excel(333.xlsx, indexFalse) # 合并指定目录下所有的 excel (csv) 文件 import glob files glob.glob(data/cs/*.xls) dflist [] for i in files: dflist.append(pd.read_excel(i, usecols[ID, 时间, 名称])) df pd.concat(dflist) # 合并增加列 # 对df1的列和df2的列执行SQL形式的join df1.join(df2,oncol1,howinner) # 用 key 合并两个表 df_all pd.merge(df_sku, df_spu, howleft, left_ondf_sku[product_id], right_ondf_spu[p.product_id])时间处理 时间序列# 时间索引 df.index pd.DatetimeIndex(df.index) # 时间只保留日期 df[date] df[time].dt.date # 将指定字段格式化为时间类型 df[date] pd.to_datetime(df[时间]) # 转化为北京时间 df[time] df[time].dt.tz_convert(Asia/Shanghai) # 转为指定格式可能会失去秒以后的精度 df[time] df[time].dt.strftime(%Y-%m-%d %H:%M:%S) dc.index pd.to_datetime(dc.index, format%Y%m%d, errorsignore) # 时间参与运算 pd.DateOffset(days2) # 当前时间 pd.Timestamp.now() pd.to_datetime(today) # 判断时间是否当天 pd.datetime.today().year df.start_work.dt.year df.time.astype(datetime64[ns]).dt.date pd.to_datetime(today) # 定义个天数 import datetime days lambda x: datetime.timedelta(daysx) days(2) # 同上直接用 pd 包装的 pd.Timedelta(days2) # unix 时间戳 pd.to_datetime(ted.film_date, unitms) # 按月YMDHminS采集合计数据 df.set_index(date).resample(M)[quantity].sum() df.set_index(date).groupby(name)[ext price].resample(M).sum() # 按天汇总index 是 datetime 时间类型 df.groupby(bydf.index.date).agg({uu:count}) # 按周汇总 df.groupby(bydf.index.weekday).uu.count() # 按月进行汇总 df.groupby([name, pd.Grouper(keydate, freqM)])[ext price].sum() # 按月进行汇总 df.groupby(pd.Grouper(keyday, freq1M)).sum() # 按照年度且截止到12月最后一天统计 ext price 的 sum 值 df.groupby([name, pd.Grouper(keydate, freqA-DEC)])[ext price].sum() # 按月的平均重新采样 df[Close].resample(M).mean() # https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases # 取时间范围并取工作日 rng pd.date_range(start6/1/2016,end6/30/2016,freqB) # 重新定时数据频度按一定补充方法 df.asfreq(D, methodpad) # 时区df.tz_convert(Europe/Berlin) df.time.tz_localize(tzAsia/Shanghai) # 转北京时间 df[Time] df[Time].dt.tz_localize(UTC).dt.tz_convert(Asia/Shanghai) # 查看所有时区 from pytz import all_timezones print (all_timezones) # 时长多久两个时间间隔时间时差 df[duration] pd.to_datetime(df[end]) - pd.to_datetime(df[begin]) # 指定时间进行对比 df.Time.astype(datetime64[ns]) pd.to_datetime(2019-12-11 20:00:00, format%Y-%m-%d %H:%M:%S)常用备忘# 解决科学计数法问题 df pd.read_csv(111.csv, sep\t).fillna()[:].astype(str) # 和订单量相关性最大到小显示 dd.corr().total_order_num.sort_values(ascendingFalse) # 解析列表、json 字符串 import ast ast.literal_eval([{id: 7, name: Funny}]) # Series apply method applies a function to # every element in a Series and returns a Series ted.ratings.apply(str_to_list).head() # lambda is a shorter alternative ted.ratings.apply(lambda x: ast.literal_eval(x)) # an even shorter alternative is to apply the # function directly (without lambda) ted.ratings.apply(ast.literal_eval) # 索引 index 使用 apply() df.index.to_series().apply()样式显示# https://pbpython.com/styling-pandas.html df[per_cost] df[per_cost].map({:,.2f}%.format) # 显示%比形式 # 指定列表值大于0加背景色 df.style.applymap(lambda x: background-color: grey if x0 else , subsetpd.IndexSlice[:, [B, C]]) # 最大值最小值加背景色 df.style.highlight_max(colorlightgreen).highlight_min(color#cd4f39) df.style.format({:.2%}, subsetpd.IndexSlice[:, [B]]) # 显示百分号 # 指定各列的样式 format_dict {sum:${0:,.0f}, date: {:%Y-%m}, pct_of_total: {:.2%} c: str.upper} # 一次性样式设置 (df.style.format(format_dict) # 多种样式形式 .hide_index() # 指定列按颜色深度表示值大小, cmap 为 matplotlib colormap .background_gradient(subset[sum_num], cmapBuGn) # 表格内作横向 bar 代表值大小 .bar(color#FFA07A, vmin100_000, subset[sum], alignzero) # 表格内作横向 bar 代表值大小 .bar(colorlightgreen, vmin0, subset[pct_of_total], alignzero) # 下降小于0为红色, 上升为绿色 .bar(color[#ffe4e4,#bbf9ce], vmin0, vmax1, subset[增长率], alignzero) # 给样式表格起个名字 .set_caption(2018 Sales Performance) .hide_index()) # 按条件给整行加背景色样式 def background_color(row): if row.pv_num 10000: return [background-color: red] * len(row) elif row.pv_num 100: return [background-color: yellow] * len(row) return [] * len(row) # 使用 df.style.apply(background_color, axis1)表格中的直方图sparkline 图形import sparklines import numpy as np def sparkline_str(x): binsnp.histogram(x)[0] sl .join(sparklines.sparklines(bins)) return sl sparkline_str.__name__ sparkline # 画出趋势图保留两位小数 df.groupby(name)[quantity, ext price].agg([mean, sparkline_str]).round(2) # sparkline 图形 # https://hugoworld.wordpress.com/2019/01/26/sparklines-in-jupyter-notebooks-ipython-and-pandas/ def sparkline(data, figsize(4, 0.25), **kwargs): creates a sparkline # Turn off the max column width so the images wont be truncated pd.set_option(display.max_colwidth, -1) # Turning off the max column will display all the data # if gathering into sets / array we might want to restrict to a few items pd.set_option(display.max_seq_items, 3) #Monkey patch the dataframe so the sparklines are displayed pd.DataFrame._repr_html_ lambda self: self.to_html(escapeFalse) from matplotlib import pyplot as plt import base64 from io import BytesIO data list(data) *_, ax plt.subplots(1, 1, figsizefigsize, **kwargs) ax.plot(data) ax.fill_between(range(len(data)), data, len(data)*[min(data)], alpha0.1) ax.set_axis_off() img BytesIO() plt.savefig(img) plt.close() return img srcdata:image/png;base64, {} /.format(base64.b64encode(img.getvalue()).decode()) # 使用 df.groupby(name)[quantity, ext price].agg([mean, sparkline]) df.apply(sparkline, axis1) # 仅支持横向数据画线可做 T 转置可视化kind : str - line : line plot (default) - bar : vertical bar plot - barh : horizontal bar plot - hist : histogram - box : boxplot - kde : Kernel Density Estimation plot - density : same as kde - area : area plot - pie : pie plot常用方法df88.plot.bar(yrate, figsize(20, 10)) # 图形大小单位英寸 df_1[df_1.p_day 2019-06-01].plot.bar(xp_day, y[total_order_num,order_user], figsize(16, 6)) # 柱状图 # 每条线一个站点各站点的 home_remain, stack的意思是堆叠堆积 # unstack 即“不要堆叠” (df[(df.p_day 2019-05-1) (df.utype 老客)].groupby([p_day, site_id])[home_remain].sum().unstack().plot.line()) # 折线图多条, x 轴默认为 index dd.plot.line(xp_day, y[uv_all, home_remain]) dd.loc[新访客, 2].plot.scatter(xorder_user, ypaid_order_user) # 散点图 dd.plot.bar(colorblue) # 柱状图, barh 为横向柱状图 sns.heatmap(dd.corr()) # 相关性可视化 # 刻度从0开始指定范围 ylim(0,100), x 轴相同 s.plot.line(ylim0) # 折线颜色 https://matplotlib.org/examples/color/named_colors.html # 样式( -,--,-.,: ) # 折线标记 https://matplotlib.org/api/markers_api.html # gridTrue 显示刻度 etc: https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html s.plot.line(colorgreen, linestyle-, markero) # 两个图绘在一起 [df[数量].plot.kde(), df[数量].plot.hist()] # 对表中的数据按颜色可视化 import seaborn as sns cm sns.light_palette(green, as_cmapTrue) df.style.background_gradient(cmapcm, axis1) # 将数据转化为二维数组 [i for i in zip([i.strftime(%Y-%m-%d) for i in s.index.to_list()], s.to_list())] # 和 plot 用法一样 https://hvplot.pyviz.org/user_guide/Plotting.html import hvplot.pandas # 打印 Sqlite 建表语句 print(pd.io.sql.get_schema(fdf, table_name))Jupyter notebooks 问题# jupyter notebooks plt 图表配置 import matplotlib.pyplot as plt plt.rcParams[figure.figsize] (15.0, 8.0) # 固定显示大小 plt.rcParams[font.family] [sans-serif] # 显示中文问题 plt.rcParams[font.sans-serif] [SimHei] # 显示中文问题 # 输出单行全部变量 from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity all # jupyter notebooks 页面自适应宽度 from IPython.core.display import display, HTML display(HTML(style.container { width:100% !important; }/style)) # 背景白色 style#notebook_panel {background: #ffffff;}/style # jupyter notebooks 嵌入页面内容 from IPython.display import IFrame IFrame(https://arxiv.org/pdf/1406.2661.pdf, width800, height450) # Markdown 一个 cell 不支持多张粘贴图片 # 一个文件打印打开只显示一张图片问题解决 # /site-packages/notebook/static/notebook/js/main.min.js var key 处 # 33502、33504 行 key utils.uuid().slice(2,6)encodeURIandParens(blob.name); key utils.uuid().slice(2,6)Object.keys(that.attachments).length; # https://github.com/ihnorton/notebook/commit/55687c2dc08817da587977cb6f19f8cc0103bab1 # 多行输出 from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity all #默认为last # 执行 shell 命令: ! 命令语句 # 在线可视化工具 https://plot.ly/createSlideshow 幻灯片安装 RISE 库pip install RISE- [Altr] 播放/退出播放 -「,」逗号隐藏左侧两个大操作按钮「t」总览 ppt「/」黑屏 - Slide主页面通过按左右方向键进行切换。 - Sub-Slide副页面通过按上下方向键进行切换。全屏 - Fragment一开始是隐藏的按空格键或方向键后显示实现动态效果。在一个页面 - Skip在幻灯片中不显示的单元。 - Notes作为演讲者的备忘笔记也不在幻灯片中显示。

相关文章:

【转载】pandas 的速查表

作者:不了哭 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Pandas 是一个强大的分析结构化数据的工具集,它的使用基础是 Numpy(提供高性能的矩阵运算),用…...

用TensorFlow和PyTorch手把手教你搭建视频动作识别模型(基于3D卷积)

从零构建视频动作识别模型:TensorFlow与PyTorch双框架实战指南 视频动作识别正成为智能监控、体育分析和人机交互等领域的核心技术。不同于静态图像分类,这项任务需要同时理解空间特征和时间动态——这正是3D卷积神经网络(3D CNN)…...

docker 指令

docker启动关闭查看状态# 启动 sudo systemctl start docker # 关闭 sudo systemctl stop docker # 查看状态 sudo systemctl status dockerdocker部署mysql拉取MySQL容器sudo docker pull mysql:8.0或者通过本地的tar包加载进去也可以sudo docker load -i mysql8.tar检查是否导…...

用PCA分析中国各省消费结构:一份R语言实战报告(从数据清洗到结果解读)

中国各省消费结构的主成分分析:从R语言实现到商业洞察 当我们面对包含多个消费维度的省级数据时,如何快速识别出隐藏在数字背后的消费模式差异?主成分分析(PCA)为我们提供了一把解开这个谜题的钥匙。这份报告将带你从数…...

YOLO11涨点优化:Block改进 | 融合EfficientNetV2的Fused-MBConv模块,优化浅层网络特征提取效率

一、写作动机:为什么还要折腾YOLO11? YOLO11作为Ultralytics团队在2025年持续主推的实时目标检测模型,自发布以来在COCO基准和工业落地场景中展现了极强的竞争力。其架构延续了Backbone+Neck+Head的模块化设计,并引入C3k2模块替换上一代C2f、在Backbone末端加入C2PSA注意力…...

【困难】0左边必有1的二进制字符串数量-Java:解法一

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程大家好!欢迎来到我的网站! 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑&#x…...

终极免费方案:如何快速批量下载网易云音乐无损FLAC歌曲

终极免费方案:如何快速批量下载网易云音乐无损FLAC歌曲 【免费下载链接】NeteaseCloudMusicFlac 根据网易云音乐的歌单, 下载flac无损音乐到本地.。 项目地址: https://gitcode.com/gh_mirrors/nete/NeteaseCloudMusicFlac 还在为无法下载网易云音乐的无损音…...

【中等】回文最少分割数-Java

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程大家好!欢迎来到我的网站! 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑&#x…...

时间序列预测实战:从特征工程到XGBoost模型构建

1. 项目概述:一个基于数据驱动的预测工具最近在整理一些数据分析项目时,发现了一个挺有意思的仓库,叫ssq-predictor。从名字就能看出来,这是一个针对特定数字序列的预测工具。虽然项目本身可能带有一些娱乐性质,但它背…...

在 SAP Gateway 的 $filter 里支持 toupper 和 tolower 的一条实战路线

今天正在处理一个很典型的 SAP Gateway 问题,前端同事希望在 OData 请求里这样写过滤条件,按照产品类别做大小写不敏感查询。 /sap/opu/odata/SAP/ZGW_TOUPPER_SRV/SEPM_I_Product_E?$filter=toupper(ProductCategory) eq SPEAKERS&$format=json直觉上看,这个写法很自…...

GHelper终极指南:华硕笔记本性能优化与硬件控制完整解决方案

GHelper终极指南:华硕笔记本性能优化与硬件控制完整解决方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Str…...

(AUTOSAR)CANTP报文帧类型

文章目录1.四种报文类型(简洁明了)2. 单帧(SF,Single Frame)3.首帧(FF,First Frame)3. 连续帧(Consecutive Frame)4.流控帧(FC,Flow C…...

3步解锁Mac触控板原生体验:Windows用户必读的精准触控驱动配置指南

3步解锁Mac触控板原生体验:Windows用户必读的精准触控驱动配置指南 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-precision…...

从零构建可验证WASM边缘服务:Docker插件签名、attestation与自动安装流水线(FIPS 140-3合规版)

更多请点击: https://intelliparadigm.com 第一章:Docker WASM 边缘计算部署指南 WebAssembly(WASM)正迅速成为边缘计算场景中轻量、安全、跨平台执行逻辑的核心载体,而 Docker 官方对 WASM 的原生支持(自…...

创业做智能音箱可行吗?

主流芯片方案进行分析,对比 ESP32 系列与联发科 Filogic 130A 等专用语音芯片在硬件成本、算力架构、低功耗待机、远场语音识别等方面的差异,论证 ESP32 替代高端专用 DSP 芯片的可行性边界,并给出面向不同产品定位的选型建议,为语…...

多维度拆透渲染引擎 第六篇【维度:横向对比】不同视角下的渲染引擎

第六篇【维度:横向对比】不同视角下的渲染引擎读完此篇你将理解:从产品形态、使用者角色、技术路线、目标平台、行业应用五个正交维度定位任意渲染引擎。引子 前五篇我们都在"纵向"分析渲染引擎——定义、边界、内部结构、架构、技术栈。每一篇…...

Awesome Codex Skills中的Basin自动化:表单处理和数据收集的终极工具

Awesome Codex Skills中的Basin自动化:表单处理和数据收集的终极工具 【免费下载链接】awesome-codex-skills A curated list of practical Codex skills for automating workflows across the Codex CLI and API. 项目地址: https://gitcode.com/GitHub_Trending…...

AI 编程工具完全使用指南:Copilot / Cursor / Gemini 怎么用才对?

AI 编程工具完全使用指南:Copilot / Cursor / Gemini 怎么用才对? 本文面向所有编程学习者,系统讲解 2026 年主流 AI 编程工具的正确用法——不是为了「写得更快」,而是为了「学得更深」。如果你正在用 AI 工具但总觉得「写出来的…...

深度定制你的简历:React Ultimate Resume配色方案与个性化设置教程

深度定制你的简历:React Ultimate Resume配色方案与个性化设置教程 【免费下载链接】react-ultimate-resume 💼 🎨 A modern software developer resume built with React and JSONResume 项目地址: https://gitcode.com/gh_mirrors/re/rea…...

3分钟彻底清理Windows系统:Win11Debloat一键优化终极指南

3分钟彻底清理Windows系统:Win11Debloat一键优化终极指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and…...

Boris开发者指南:如何贡献代码和参与社区建设

Boris开发者指南:如何贡献代码和参与社区建设 【免费下载链接】boris A tiny REPL for PHP 项目地址: https://gitcode.com/gh_mirrors/bo/boris Boris作为一款轻量级但功能强大的PHP REPL(Read-Evaluate-Print-Loop)工具,…...

3DSident CIA版:为什么这是3DS玩家必备的系统信息检测工具?

3DSident CIA版:为什么这是3DS玩家必备的系统信息检测工具? 【免费下载链接】3DSident PSPident clone for 3DS 项目地址: https://gitcode.com/gh_mirrors/3d/3DSident 如果你还在用3DSX格式的3DSident,那你可能错过了3DS自制软件体验…...

思源宋体完整攻略:7款免费专业字体让你的中文设计瞬间升级

思源宋体完整攻略:7款免费专业字体让你的中文设计瞬间升级 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业项目寻找高品质中文字体而烦恼?思源宋体简…...

Windows系统优化终极指南:如何用开源工具快速释放C盘空间

Windows系统优化终极指南:如何用开源工具快速释放C盘空间 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否每天打开电脑,第一眼就看到…...

Ladybird内存面板:堆内存与垃圾回收监控终极指南

Ladybird内存面板:堆内存与垃圾回收监控终极指南 【免费下载链接】ladybird Truly independent web browser 项目地址: https://gitcode.com/GitHub_Trending/la/ladybird Ladybird作为一款真正独立的网页浏览器,其内存管理系统是保证浏览器高效稳…...

别再手动写列了!用Vue3 + vxe-grid动态渲染表格的保姆级教程

Vue3 vxe-grid动态表格实战:告别手动列配置的时代 每次接到新需求要加三个字段时,你是不是还在手动修改columns配置?当后端数据结构频繁变动时,是否还在重复着"改字段->测试->发布"的机械操作?今天我…...

4步构建高效小程序逆向分析架构:wxappUnpacker深度技术实践指南

4步构建高效小程序逆向分析架构:wxappUnpacker深度技术实践指南 【免费下载链接】wxappUnpacker forked from https://github.com/qwerty472123/wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 在当今快速发展的移动应用生态…...

保姆级教程:在Windows/Linux上用C++和ONNX Runtime部署TensorRT模型(附环境生命周期避坑指南)

从零构建:C与ONNX Runtime的TensorRT模型部署全流程实战 第一次将ONNX模型部署到生产环境时,我盯着屏幕上"0xC0000005"的内存访问错误整整发呆了半小时。这个看似简单的错误背后,隐藏着ONNX Runtime环境生命周期管理的核心机制。本…...

AI视频换脸技术:原理、优化与实践指南

1. 项目概述:AI视频换脸工具的核心价值最近在测试一款名为Free AI Video Face Swap Generator的工具,它彻底改变了传统视频换脸的操作门槛。过去要实现类似效果,至少需要掌握After Effects、Python脚本和3D建模知识,现在只需要上传…...

移动语义、右值引用和完美转发:C++性能优化的终极指南

移动语义、右值引用和完美转发:C性能优化的终极指南 【免费下载链接】interview 📚 C/C 技术面试基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验、招聘、内推等信息。This repository is a summary…...