如何读取指定格式文本文件并创建等价的Pandas DataFrame
问题描述
给定文本文件data.txt的内容如下:
John: 1 Jane: 5 Mark: 7 Dan: 2
如何使用Python读取该文件,创建出与以下代码逻辑等价的Pandas DataFrame?
# 初始化数据 data = {'Name': ['John', 'Jane', 'Mark', 'Dan'], 'Count': [1, 5, 7, 2]} # 创建DataFrame df = pd.DataFrame(data)
解决方法
方法1:逐行手动处理
适合需要自定义处理逻辑的场景,手动读取每一行并拆分数据:
import pandas as pd names = [] counts = [] # 打开文件逐行读取 with open('data.txt', 'r', encoding='utf-8') as f: for line in f: # 去掉行首尾的空白字符,按": "拆分 name, count_str = line.strip().split(': ') names.append(name) # 将计数转为整数类型 counts.append(int(count_str)) # 构建目标DataFrame df = pd.DataFrame({'Name': names, 'Count': counts})
方法2:用Pandas的read_csv快速读取
利用read_csv的分隔参数直接解析文件,效率更高:
import pandas as pd # 指定分隔符为": ",设置列名,同时指定Count列的类型为整数 df = pd.read_csv( 'data.txt', sep=': ', header=None, names=['Name', 'Count'], dtype={'Count': int}, engine='python' )
注意:这里必须指定
engine='python',因为C引擎不支持多字符的分隔符(这里是冒号加空格)。
方法3:正则分隔适配灵活格式
如果文件里冒号前后的空格数量不固定,可以用正则表达式作为分隔符,兼容性更强:
import pandas as pd # 用正则匹配冒号前后任意数量的空格,拆分列 df = pd.read_table( 'data.txt', sep='\s*:\s*', header=None, names=['Name', 'Count'], dtype={'Count': int}, engine='python' )
内容的提问来源于stack exchange,提问作者Prince M
相关产品推荐
相关产品推荐

