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

如何将按日期紧凑存储的TXT文件数据导入Python Pandas并规整为标准格式(无需手动重复日期)

解决方案:自动补全日期并转换为目标格式

没问题!这种日期仅在当天首条记录出现的文本格式,用pandas完全可以自动处理,不用手动补全重复日期。下面分别实现你需要的两种格式:

前置准备

首先确保你已经安装了pandas,然后准备好你的TXT文件(假设文件名为purchase_records.txt)。


格式一:新增独立的Date列

这种方案会保留Date和Time两个独立列,自动补全缺失的日期:

import pandas as pd

# 1. 按行读取文本文件
with open('purchase_records.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()

# 2. 处理表头和初始化数据容器
header = lines[0].strip().split()
data_list = []
current_date = None

# 3. 逐行处理数据
for line in lines[1:]:
    line = line.strip()
    if not line:
        continue  # 跳过空行
    
    # 拆分每行内容,最多拆3部分(兼容带空格的物品名称)
    parts = line.split(maxsplit=2)
    
    # 判断当前行是否包含日期(这里默认日期是8位数字,如20120701)
    if len(parts[0]) == 8:
        current_date = parts[0]
        time_str = parts[1]
        item = parts[2]
    else:
        time_str = parts[0]
        item = parts[1]
    
    data_list.append([current_date, time_str, item])

# 4. 转换为DataFrame
df_format1 = pd.DataFrame(data_list, columns=['Date', 'Time', 'Purchasing_item'])
print(df_format1)

运行后会得到你需要的格式:

Date   Time Purchasing_item
0  20120701 00:00        Apple pie
1  20120701 00:01       Coca-cola
2  20120702 00:00            Pepsi
3  20120702 00:01        Fish-ball

格式二:合并日期与时间为Timestamp列

这种方案会把日期和时间合并成一个完整的时间戳列(可以是字符串类型或datetime类型):

import pandas as pd

# 前面的读取和处理步骤和格式一完全一致
with open('purchase_records.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()

header = lines[0].strip().split()
data_list = []
current_date = None

for line in lines[1:]:
    line = line.strip()
    if not line:
        continue
    
    parts = line.split(maxsplit=2)
    
    if len(parts[0]) == 8:
        current_date = parts[0]
        time_str = parts[1]
        item = parts[2]
    else:
        time_str = parts[0]
        item = parts[1]
    
    data_list.append([current_date, time_str, item])

# 转换为DataFrame后合并日期和时间
df_format2 = pd.DataFrame(data_list, columns=['Date', 'Time', 'Purchasing_item'])

# 选项1:合并为datetime类型的时间戳(推荐,方便后续时间操作)
df_format2['Time'] = pd.to_datetime(df_format2['Date'] + ' ' + df_format2['Time'])

# 选项2:合并为字符串类型的时间(如果不需要datetime功能)
# df_format2['Time'] = df_format2['Date'] + ' ' + df_format2['Time']

# 删除多余的Date列
df_format2 = df_format2.drop('Date', axis=1)
print(df_format2)

运行后得到的结果(以datetime类型为例):

Time Purchasing_item
0 2012-07-01 00:00:00        Apple pie
1 2012-07-01 00:01:00       Coca-cola
2 2012-07-02 00:00:00            Pepsi
3 2012-07-02 00:01:00        Fish-ball

关键说明

  • 使用split(maxsplit=2)是为了兼容带空格的物品名称(比如Apple pie),避免把物品名称拆分成多个部分;
  • 判断日期的逻辑(len(parts[0]) == 8)可以根据你的实际日期格式调整,比如如果日期是2012-07-01,可以改成'-' in parts[0];
  • 处理空行是为了避免读取文件时遇到空行导致报错。

内容的提问来源于stack exchange,提问作者KiuSandy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:32:45