如何直接将自动生成的文本文件导入Python并转换为DataFrame?
直接加载文本文件为Pandas DataFrame的方法
当然可以直接加载原文本文件转成DataFrame,不用先转CSV。利用你提到的"for"作为可靠分隔符,结合Pandas的文本处理功能就能搞定,给你两种实用方法:
方法1:用read_csv直接分割+列清洗
这种方法利用Pandas的读取函数,以"for"为分隔符拆分每行,再清洗出需要的字段:
import pandas as pd # 读取文件,用正则匹配「任意空格+for+任意空格」作为分隔符 df = pd.read_csv('你的文件名.txt', sep=r'\s+for\s+', engine='python', header=None) # 提取Statement编号:从第一列中匹配Statement#后的数字 df['Statement'] = df[0].str.extract(r'Statement# (\d+)') # 处理金额:去掉$符号,转为数值类型 df['Amount'] = df[1].str.replace('$', '').astype(float) # 可选:把整数金额转成整数格式(比如-51.00变成-51) df['Amount'] = df['Amount'].apply(lambda x: int(x) if x.is_integer() else x) # 提取月份:去掉第三列的"the month of "前缀 df['Month'] = df[2].str.replace('the month of ', '') # 只保留需要的列 df = df[['Statement', 'Amount', 'Month']] print(df)
方法2:正则表达式精准提取字段
如果文本格式完全固定,用正则直接匹配每行的三个目标字段更高效:
import pandas as pd import re # 定义正则模式,匹配Statement编号、金额、月份 pattern = r'Statement# (\d+) for \$([-?\d+\.\d*]) for the month of (.+)' data_rows = [] with open('你的文件名.txt', 'r', encoding='utf-8') as f: for line in f: match_result = re.search(pattern, line.strip()) if match_result: stmt_num = match_result.group(1) amount = float(match_result.group(2)) # 转换整数金额为int amount = int(amount) if amount.is_integer() else amount month_str = match_result.group(3) data_rows.append([stmt_num, amount, month_str]) # 转为DataFrame final_df = pd.DataFrame(data_rows, columns=['Statement', 'Amount', 'Month']) print(final_df)
两种方法都能得到你想要的DataFrame结构,根据自己的习惯选就行。
内容的提问来源于stack exchange,提问作者jshibby
相关产品推荐
相关产品推荐

