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

如何使用Python向Pandas DataFrame动态添加TXT文件数据?

问题:从竖线分隔的TXT文件动态生成8列Pandas DataFrame

我需要从TXT文件提取数据,存入一个固定8列的Pandas DataFrame。TXT文件每行数据以竖线(|)分隔,对应DataFrame的每行单元格,目标格式示例如下:

Column 1 | Column 2 | Column 3 | Column 4 | Column 5 | Column 6 | Column 7 | Column 8
------------------------------------------------------------------------------------- 
Lorem     |    Ipsum   |    is      |    simply  | dummy     |
text      |      of    |    the     |   printing |  and      |
typesetting| industry. |    Lorem   |
more       | recently  |    with    |   desktop  | publishing|  software  |   like     | Aldus    |

我编写了如下代码,但只能手动指定列添加数据,无法适配每行不同的单元格数量:

import pandas as pd

with open(file) as f:
   data = f.read().split('\n')

columns = ['Column 1', 'Column 2', 'Column 3', 'Column 4', 'Column 5', 'Column 6', 'Column 7', 'Column 8']

df = pd.DataFrame(columns=columns)

for i in data:
    row = i.split(' | ')
    df = df.append({'Column 1': f'{row[0]}', 'Column 2': f'{row[1]}', 'Column 3': f'{row[2]}', 'Column 4': f'{row[3]}', 'Column 5': f'{row[4]}'}, ignore_index = True)

需求:实现动态添加,无论每行有多少个单元格,都能自动对应到DataFrame的8列中。


解决方案

核心思路

  1. 清理每行数据:分割后去除每个元素的多余空格,避免数据带无效空白
  2. 统一行长度:将每行处理为固定8个元素,不足的补NaN(或空字符串),超过的只保留前8个元素
  3. 高效生成DataFrame:一次性将所有处理后的行传入DataFrame,替代低效的循环append

实现代码

import pandas as pd
import numpy as np

# 定义固定8列的列名
columns = ['Column 1', 'Column 2', 'Column 3', 'Column 4', 'Column 5', 'Column 6', 'Column 7', 'Column 8']

processed_rows = []
# 读取并处理每行数据
with open('your_file.txt', 'r', encoding='utf-8') as f:
    for line in f:
        # 去除行首尾的换行符和空白字符
        cleaned_line = line.strip()
        # 跳过空行
        if not cleaned_line:
            continue
        # 按竖线分割,并清理每个元素的前后空白
        row_items = [item.strip() for item in cleaned_line.split('|')]
        # 统一处理为8个元素:取前8个,不足的用NaN填充
        processed_row = row_items[:8] + [np.nan] * (8 - len(row_items))
        processed_rows.append(processed_row)

# 生成目标DataFrame
df = pd.DataFrame(processed_rows, columns=columns)
print(df)

代码说明

  • 数据清理:通过strip()处理每行和每个分割元素,确保数据无多余空格
  • 行长度统一:使用切片row_items[:8]截断超长行,用[np.nan]*(8 - len(row_items))补充不足的列,保证每行都对应8列
  • 性能优化:一次性构建所有行的列表再生成DataFrame,比循环调用append效率提升数倍,尤其适合大文件场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:15:32