You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:27:02