如何使用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列中。
解决方案
核心思路
- 清理每行数据:分割后去除每个元素的多余空格,避免数据带无效空白
- 统一行长度:将每行处理为固定8个元素,不足的补
NaN(或空字符串),超过的只保留前8个元素 - 高效生成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
相关产品推荐
相关产品推荐

