如何用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
相关产品推荐
相关产品推荐

