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

如何用pd.read_csv直接读取含日期时间的列表式文本文件为DataFrame?

用pd.read_csv直接读取含空格日期时间的列表格式文本文件

问题场景

需要把每行是列表格式、且日期时间字段包含空格的文本文件,直接通过pd.read_csv加载成DataFrame,替代现有的间接读取方法。

示例数据

文本文件testdata.txt的内容对应如下列表结构:

testdata = [['2024-01-31 10:02:23', 'orange', '5'],
            ['2024-01-31 16:59:02', 'apple', '10'],
            ['2024-01-31 17:02:23', 'lemon', '5'],
            ['2024-01-31 18:59:02', 'banana', '1'],
            ['2024-01-31 19:02:23', 'pear', '4'],
            ['2024-01-31 20:59:02', 'watermelon', '2']]

现有间接读取方法

通过手动读取解析每行的方式可行,但不够简洁:

import ast
import pandas as pd

with open("testdata.txt", 'r') as file:
    food_prices = file.readlines()
    food_prices = [ast.literal_eval(food_prices[i].rstrip('\n')) for i in range(len(food_prices))]

df = pd.DataFrame(food_prices)
df.columns = ["Datetime", "Item", "Cost"]

尝试失败的read_csv代码

直接用空格做分隔符会把日期和时间拆成两列,导致列数混乱:

df = pd.read_csv("testdata.txt", header = None, sep =' ')

直接用read_csv的解决方案

利用converters参数配合ast.literal_eval,让pandas直接解析每行的列表结构:

import pandas as pd
import ast

# 读取时把每行内容解析成列表
df = pd.read_csv("testdata.txt", header=None, converters={0: ast.literal_eval})
# 将列表展开为多列
df = df[0].apply(pd.Series)
# 设置列名
df.columns = ["Datetime", "Item", "Cost"]

预期输出

Datetime        Item Cost
0  2024-01-31 10:02:23      orange    5
1  2024-01-31 16:59:02       apple   10
2  2024-01-31 17:02:23       lemon    5
3  2024-01-31 18:59:02      banana    1
4  2024-01-31 19:02:23        pear    4
5  2024-01-31 20:59:02  watermelon    2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:42:31