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

如何将Python列表中的值提取至Pandas DataFrame

把HDFS风格的列表转成Pandas DataFrame的方法

嘿,这问题我熟!你的列表里每个元素都是类似HDFS ls命令的输出格式,要提取到DataFrame里,关键是先拆分每个字符串的字段,再处理URL编码的时间参数。下面是具体的实现步骤:

步骤1:导入必要的库

我们需要pandas来创建DataFrame,urllib.parse来解码URL里的特殊字符(比如%3A对应冒号:),还有datetime来处理时间格式:

import pandas as pd
from urllib.parse import unquote
from datetime import datetime

步骤2:定义原始列表并处理每个元素

先把你的原始列表写出来,然后循环遍历每个元素,拆分字段并处理时间:

list_fs = [
    'drwxrwx--- - uname 0 2017-08-25 12:10 hdfs://filepath=2011-01-31 16%3A06%3A09.0',
    'drwxrwx--- - uname 0 2017-08-29 14:12 hdfs://filepath=2011-02-28 10%3A00%3A00',
    'drwxrwx--- - uname 0 2017-08-29 14:20 hdfs://filepath=2011-03-31 10%3A00%3A00',
    'drwxrwx--- - uname 0 2017-08-29 14:32 hdfs://filepath=2011-04-30 10%3A00%3A00',
    'drwxrwx--- - uname 0 2018-02-20 13:57 hdfs://filepath=2011-05-31 08%3A00%3A00',
    'drwxrwx--- - uname 0 2017-08-29 15:02 hdfs://filep...'
]

# 准备一个空列表存储处理后的数据
processed_data = []

for item in list_fs:
    try:
        # 拆分字符串:前5个字段用空格分隔,剩下的合并为HDFS路径部分
        parts = item.split(maxsplit=5)
        perm = parts[0]
        placeholder = parts[1]
        username = parts[2]
        size = int(parts[3])
        modify_time = datetime.strptime(parts[4], '%Y-%m-%d %H:%M')
        
        # 处理HDFS路径里的时间参数
        hdfs_part = parts[5]
        # 提取filepath后面的时间字符串
        file_time_str = hdfs_part.split('=')[1]
        # 解码URL编码的%3A为冒号
        decoded_file_time = unquote(file_time_str)
        # 转成datetime对象(兼容带毫秒和不带毫秒的格式)
        if '.' in decoded_file_time:
            file_time = datetime.strptime(decoded_file_time, '%Y-%m-%d %H:%M:%S.%f')
        else:
            file_time = datetime.strptime(decoded_file_time, '%Y-%m-%d %H:%M:%S')
        
        # 把处理好的字段添加到列表
        processed_data.append({
            '权限': perm,
            '占位符': placeholder,
            '用户名': username,
            '大小': size,
            '修改时间': modify_time,
            '文件时间': file_time,
            'HDFS路径': hdfs_part
        })
    except Exception as e:
        # 处理截断的元素(比如最后一个),标记错误信息避免程序崩溃
        print(f"处理元素 '{item}' 时出错: {e}")
        processed_data.append({
            '权限': None,
            '占位符': None,
            '用户名': None,
            '大小': None,
            '修改时间': None,
            '文件时间': None,
            'HDFS路径': item,
            '错误信息': str(e)
        })

# 转成DataFrame
df = pd.DataFrame(processed_data)
print(df)

步骤3:查看结果

运行后你会得到一个结构清晰的DataFrame,包含所有提取的字段。对于最后那个截断的元素,我们用try-except捕获了错误,标记了错误信息,避免整个程序崩溃。

关键说明

  • 使用split(maxsplit=5)是因为前5个字段都是用单个空格分隔,而最后一个HDFS路径部分包含空格,不能直接全部分割。
  • unquote函数用来解码URL中的特殊字符,比如把%3A转成:,这样时间格式才能正确解析。
  • 加入try-except是为了处理列表中可能存在的不完整数据(比如最后那个截断的元素),增强代码的健壮性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:47:26