python2C 之 DataFrame列与行(index 和列相互转化, 行列重命名)

本文介绍了使用 Pandas 进行高效数据处理的方法,包括行列之间的转换、数据重塑、索引操作及排序等实用技巧。
部署运行你感兴趣的模型镜像

行列间的转化与拼接

一、将index 和每一列的数值相互转化

df.set_index(["Column"], inplace=True)

1. 将a列转为index列: set_index

2. 将index 转为列a:

使用之前可以将index重命名:df.index.name = 'aaa'

reset_index()

3. 使用drop参数设置去掉原索引

reset_index(drop=True)

2. 重命名

(1)在构造变量的时候进行命名。

dt = pd.DataFrame(t1), index = [```'], columns = [```])

创造DataFrame:

a = pd.DataFrame(np.ones(2), index = ['a1', 'a2'], columns = ['bbb'])

b = pd.Series(np.ones(2), index = ['a1', 'a2'])

(2) 对index的名称进行命名

方法一:

a.index.name = 'aaa'

a.columns.name='bbb'

方法二:

a.columns =a.columns.rename("bbb")

a.index =a.index.rename("aaa")

创造DataFrame: a = pd.DataFrame(np.ones(4))

(2)对特定的行列进行命名

方法一:

dataframe.rename(columns = {"old1": "new1", "old2":"new2"}, inplace=True)

dataframe.rename(index={0: "x", 1: "y"})

dataframe.rename(index={0: "x"})

方法二:

DataFrame.index = [newName]

DataFrame.columns = [newName]

(3) 创造DataFrame, 并直接定义index,columns

pd.DataFrame(history_data.Data,index=history_data.Fields,columns=history_data.Times).T

(4) rename的高级用法:

DataFrame.rename(mapper = None,index = None,columns = None,axis = None,copy = True,inplace = False,level = None )

其中dict可以进行简写

h = dict(zip(aaa.columns, aaa.index))

df = df.rename(columns=h)

position_stock_pct.rename(lambda x: x + '_pct', axis='columns')

二、双重索引:矩阵的index与columns 重新排列相互转化

stack 与 unstack

columns转为index:

df

df1 = df.stack()

双index 拆分转为columns

df1. unstack()

设置双索引,并针对特定索引进行转化

df1 = df.set_index(['trade_dt','s_info_windcode' ])

df2 = df1.unstack('s_info_windcode')

将双轴变为拆分:

dataall3.reset_index()

查看第一个索引:ind=rawdata2.index.levels[0]

将双轴进行相互转化/填充:swaplevel

stock_mv1.swaplevel(1, 0)

三、重新排列分类:用其中的数据定义index/columns

pivot

data_df.pivot(index='userNum', columns='subjectCode', values='score')

# index: 可选参数。设置新dataframe的行索引,如果未指明,就用当前已存在的行索引。

# columns:必选参数。用来设置作为新dataframe的列索引。

# values:可选参数。在原dataframe中选中某一列/几列的值,使其在新dataframe的列里显示。如果不指定,则默认将原dataframe中所有的列都显示,这里需要注意:为了将所有的值都显示出来,就会出现多层行索引的情况。

pd.melt

将columns变为一个维度

四、对行、列重新排序

对列进行重新排序:

col_new = ['泛消费', '周期', '地产基建', '大制造', '科技成长', '金融']

indus_pos_collect_ranked = indus_pos_collect.loc[:, col_new]

以行重新排序:

indus_pos_new = indus_pos_new.sort_index()

五、改变类别标签

df['grade'] = df['grade'].cat.set_categories(['very bad', 'bad', 'medium', 'good', 'very good'])

df['grade'].cat.set_categories(['very bad', 'bad', 'medium', 'good', 'very good'], inplace=True)

df = pd.DataFrame({"ohoh":[1,2,3, 4], "haha":['a', 'b', 'b', 'c']})

#将列转化为category类型

df["hihi"] = df["haha"].astype("category")

df['hihi'].cat.categories = ["very good", "good", "very bad"]

六、将index名称自动转为序号

time_chosen.reset_index(drop=True)

已完成

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

TypeError: Expect data.index as DatetimeIndeximport requests import pandas as pd import mplfinance as mpf import matplotlib.animation as animation import matplotlib.pyplot as plt # 请求的 URL url = 'https://www.528btc.com/e/extend/api/index.php' # 请求头 import requests url = 'https://www.528btc.com/e/extend/api/index.php' headers = { "accept": "application/json, text/javascript, */*; q=0.01", "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", "content-length": "0", "origin": "https://www.528btc.com", "priority": "u=1, i", "referer": "https://www.528btc.com/coin/10000023390.html", "sec-ch-ua-mobile": "?0", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0", "x-requested-with": "XMLHttpRequest" } cookies={ "__51vcke__3ExGyQaAoNSqsSUY": "7308f30a-ddb3-54b9-8431-96de15b4e4fc", "__51vuft__3ExGyQaAoNSqsSUY": "1732114190774", "cf_chl_rc_ni": "6", "PHPSESSID": "jdc0gtelbqr0e5qvjnlllv7j6i", "__51uvsct__3ExGyQaAoNSqsSUY": "2", "__cf_bm": "TIfLL93BphzgV0MtgdhJ_FJioF3sFEvyUNZtGz.4Tp8-1743513131-1.0.1.1-uES1s2GXcV8nVspSBvt2Ts2hsU_Fs_OD86oRv46hOaW2uSQXq7MwsLNzW6t.sEgKimtf5krGEikJEZWGveIkAsbvRebrRJZO0DfGkppWrmY", "__vtins__3ExGyQaAoNSqsSUY": "%7B%22sid%22%3A%20%22f755ccdb-9d0e-55d4-a755-9f6c6f13919a%22%2C%20%22vd%22%3A%205%2C%20%22stt%22%3A%20930907%2C%20%22dr%22%3A%20896281%2C%20%22expires%22%3A%201743514932519%2C%20%22ct%22%3A%201743513132519%7D" } params={ "m": "kline", "c": "coin", "slug": "vine-coin", "id": "23390", "sortByDate": "true", "sortByDateRule": "false", "limit": "400", "symbol": "VINE", "start": "", "type": "13" } # 发送GET请求 response = requests.get(url, headers=headers, cookies=cookies, params=params) print(response.text) # 初始化图形 fig, axes = mpf.plot(pd.DataFrame(columns=['Open', 'High', 'Low', 'Close', 'Volume']), type='candle', volume=True, returnfig=True) # 颜色方案,红色代表下跌,绿色代表上涨 mc = mpf.make_marketcolors(up='g', down='r', inherit=True) s = mpf.make_mpf_style(marketcolors=mc) def update(frame): try: # 发送 GET 请求获取数据 response = requests.get(url, headers=headers, cookies=cookies, params=params) # 检查响应状态码 response.raise_for_status() # 解析 JSON 数据 data = response.json() # 将数据转换为 DataFrame df = pd.DataFrame(data) # 将时间戳转换为日期时间类型 df['T'] = pd.to_datetime(df['T'], unit='ms') # 设置日期时间为索引 df.set_index('T', inplace=True) # 确保索引是 DatetimeIndex 类型 if not isinstance(df.index, pd.DatetimeIndex): df.index = pd.DatetimeIndex(df.index) # 重命名以符合 mplfinance 的要求 df.rename(columns={'o': 'Open', 'h': 'High', 'l': 'Low', 'c': 'Close', 'v': 'Volume'}, inplace=True) # 清除之前的绘图 axes[0].clear() axes[2].clear() # 绘制新的 K 线图 mpf.plot(df, type='candle', volume=True, ax=axes[0], volume_panel=1, style=s) except requests.exceptions.HTTPError as http_err: print(f'HTTP 错误发生: {http_err}') except requests.exceptions.RequestException as req_err: print(f'请求发生错误: {req_err}') except ValueError as json_err: print(f'JSON 解析错误: {json_err}') except Exception as e: print(f'发生未知错误: {e}') # 创建动画,每 5 秒更新一次 ani = animation.FuncAnimation(fig, update, interval=5000) # 显示图形 plt.show()
04-02
class FileMergeApp(ttk.Frame): """文件合并统计分析界面""" def __init__(self, master): super().__init__(master) self.pack(fill=tk.BOTH, expand=True) # 创建标题 title_label = tk.Label( self, text="Excel文件合并统计分析", font=("黑体", 16, "bold"), fg="#2c3e50" ) title_label.pack(pady=20) # 创建说明标签 desc_label = tk.Label( self, text="此功能用于合并多个Excel文件并生成统计分析报告", font=("宋体", 12), fg="#7f8c8d" ) desc_label.pack(pady=10) # 创建功能容器 container = ttk.Frame(self) container.pack(fill=tk.BOTH, expand=True, padx=50, pady=20) container.columnconfigure(0, weight=1) container.rowconfigure((0, 1, 2, 3), weight=1) # 添加文件选择区域 file_frame = ttk.LabelFrame(container, text="选择Excel文件") file_frame.grid(row=0, column=0, sticky="ew", pady=10) self.file_listbox = tk.Listbox(file_frame, height=6) self.file_listbox.pack(fill=tk.BOTH, expand=True, padx=10, pady=5) btn_frame = ttk.Frame(file_frame) btn_frame.pack(fill=tk.X, padx=10, pady=5) add_btn = ttk.Button(btn_frame, text="添加文件", command=self.add_files) add_btn.pack(side=tk.LEFT, padx=5) remove_btn = ttk.Button(btn_frame, text="移除选中", command=self.remove_file) remove_btn.pack(side=tk.LEFT, padx=5) clear_btn = ttk.Button(btn_frame, text="清空表", command=self.clear_files) clear_btn.pack(side=tk.RIGHT, padx=5) # 添加合并选项 options_frame = ttk.LabelFrame(container, text="合并选项") options_frame.grid(row=1, column=0, sticky="ew", pady=10) self.header_var = tk.BooleanVar(value=True) header_cb = ttk.Checkbutton( options_frame, text="包含标题", variable=self.header_var ) header_cb.grid(row=0, column=0, padx=10, pady=5, sticky="w") self.merge_var = tk.StringVar(value="append") ttk.Radiobutton( options_frame, text="追加数据", variable=self.merge_var, value="append" ).grid(row=0, column=1, padx=10, pady=5, sticky="w") ttk.Radiobutton( options_frame, text="按合并", variable=self.merge_var, value="columns" ).grid(row=0, column=2, padx=10, pady=5, sticky="w") # 添加统计选项 stats_frame = ttk.LabelFrame(container, text="统计分析") stats_frame.grid(row=2, column=0, sticky="ew", pady=10) self.stats_vars = { "summary": tk.BooleanVar(value=True), "count": tk.BooleanVar(value=True), "avg": tk.BooleanVar(value=True), "minmax": tk.BooleanVar(value=True) } ttk.Checkbutton( stats_frame, text="生成汇总统计", variable=self.stats_vars["summary"] ).grid(row=0, column=0, padx=10, pady=5, sticky="w") ttk.Checkbutton( stats_frame, text="计数统计", variable=self.stats_vars["count"] ).grid(row=0, column=1, padx=10, pady=5, sticky="w") ttk.Checkbutton( stats_frame, text="平均值计算", variable=self.stats_vars["avg"] ).grid(row=0, column=2, padx=10, pady=5, sticky="w") ttk.Checkbutton( stats_frame, text="极值分析", variable=self.stats_vars["minmax"] ).grid(row=0, column=3, padx=10, pady=5, sticky="w") # 添加执按钮 execute_btn = ttk.Button( container, text="开始合并分析", command=self.start_merge, style="Accent.TButton" ) execute_btn.grid(row=3, column=0, pady=20) # 配置样式 self.style = ttk.Style() self.style.configure("Accent.TButton", foreground="white", background="#3498db", font=("Arial", 10, "bold"), padding=6) def add_files(self): files = filedialog.askopenfilenames( filetypes=[("Excel文件", "*.xls *.xlsx")] ) for file in files: if file not in self.file_listbox.get(0, tk.END): self.file_listbox.insert(tk.END, file) def remove_file(self): selected = self.file_listbox.curselection() if selected: self.file_listbox.delete(selected[0]) def clear_files(self): self.file_listbox.delete(0, tk.END) def start_merge(self): if self.file_listbox.size() == 0: messagebox.showwarning("警告", "请至少添加一个Excel文件") return # 模拟处理过程 messagebox.showinfo("提示", "文件合并分析功能正在开发中...") 功能界面:文件合并统计分析界面 (FileMergeApp) 文件表:添加、移除清空Excel文件 合并选项:指定不合并:[]、工作页合并、区块合并、按合并。指定不合并:[]输入指定A/B/C/D...数据不参合并,工作页合并:将每个Excel文件工作页合并到同一个文件不同工作页中,区块合并:将每个Excel文件工作页当前数据合并到同一个文件同一个工作页中,按合并:合并对应的合并单元格数据进判断?若为数值则进相加,若为字符串则先去重,不同字符串以'、'间隔并排合并在一个单元格 统计分析选项:汇总统计、计数统计 执按钮:开始合并分析。开始合并分析:点击执以上功能,另存生成一个(*.xls)(*.xlsx)后缀的Excel文件新文件同时弹出一个文本浏览框,可手动选择该Excel新文件保存的路径位置文件名。该文件生成后自动在其文件名后缀加上当前生成时间戳。
最新发布
07-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值