如何用Python pandas按日期或换行将单列数据拆分为多列
Pandas 单列拆分为多列实现方案
基础实现(固定每组3行,效率更高)
原始数据去掉空行后每3行刚好对应「日期、AST指标、ALT指标」的结构,可直接按固定步长拆分:
import pandas as pd # 1. 读取原始单列数据,过滤空行 # 若原始数据是txt格式,把read_csv换成read_table即可 raw_series = pd.read_csv("your_data.csv", header=None).squeeze() clean_series = raw_series[raw_series.str.strip().astype(bool)].reset_index(drop=True) # 2. 按组提取数据 data_dict = {} for idx in range(0, len(clean_series), 3): # 取当前组的日期作为列名 col_date = clean_series[idx] # 提取AST、ALT的数值 ast_val = int(clean_series[idx+1].split(":")[-1].strip()) alt_val = int(clean_series[idx+2].split(":")[-1].strip()) data_dict[col_date] = [ast_val, alt_val] # 3. 生成目标表格 result_df = pd.DataFrame(data_dict, index=["AST", "ALT"]) print(result_df)
输出示例
用你提供的测试数据运行后,输出结果如下:
1/1/2020 1/2/2020 1/3/2020 AST 100 200 100 ALT 200 300 200
兼容实现(按空行分组,适配结构不稳定的场景)
如果后续每组的指标数量可能变化,推荐按空行作为分组标识拆分,逻辑更鲁棒:
import pandas as pd raw_series = pd.read_csv("your_data.csv", header=None).squeeze() # 生成组标识:每遇到一个空行,组号加1 group_mark = raw_series.str.strip().eq("").cumsum() data_dict = {} for _, group in raw_series.groupby(group_mark): # 过滤当前组的空行 valid_rows = group[group.str.strip().astype(bool)] if len(valid_rows) < 3: continue col_date = valid_rows.iloc[0] ast_val = int(valid_rows.iloc[1].split(":")[-1].strip()) alt_val = int(valid_rows.iloc[2].split(":")[-1].strip()) data_dict[col_date] = [ast_val, alt_val] result_df = pd.DataFrame(data_dict, index=["AST", "ALT"])
注意事项
- 如果指标数值为浮点数,把代码中的
int替换为float即可 - 如果指标字符串的格式不统一(比如没有冒号、空格位置随机),可以用正则提取数字:
import re; ast_val = int(re.search(r"\d+", valid_rows.iloc[1]).group())
内容的提问来源于stack exchange,提问作者Mohammad Almeqdadi
相关产品推荐
相关产品推荐

