Python中无法将文本转换为DataFrame的问题求助
解决文本转Pandas DataFrame的问题
核心问题修正
你用print()赋值是错误的——print()仅负责输出内容,返回值永远是None,直接将原始文本以三重引号字符串形式赋值给变量即可,Python会保留文本中的换行和空行。
完整实现代码
import pandas as pd import io # 直接赋值原始文本,保留所有格式 raw_text = '''This is sample text Name|age --|-- 1.abc|45 2.xyz|34''' # 将字符串转为类文件对象,供read_csv读取 df = pd.read_csv( io.StringIO(raw_text), sep='|', skipinitialspace=True, header=3, # 指定第4行(索引3)为表头 skiprows=[4], # 跳过表头下方的分隔线行(索引4) dtype={'age': int} # 可选:指定age列的数据类型为整数 ) # 移除Name列中的数字前缀(如"1."、"2.") df['Name'] = df['Name'].str.replace(r'^\d+\.', '', regex=True) print(df)
关键步骤解释
- 三重引号字符串:用
'''或"""包裹多行文本,能完整保留原始的换行、空行,无需额外处理换行。 io.StringIO:Pandas的read_csv默认读取文件路径,StringIO可以把普通字符串模拟成可读取的文件对象,让read_csv直接处理内存中的文本。- 参数设置:
header=3:跳过前3行无关内容(两行说明文本+空行),把第4行的Name|age作为表头。skiprows=[4]:跳过表头下方的--|--分隔线行,避免它被识别为数据行。skipinitialspace=True:自动去除单元格内容前后的空格(比如分隔符|两侧的空格)。
输出结果
Name age 0 abc 45 1 xyz 34
内容的提问来源于stack exchange,提问作者ViSa
相关产品推荐
相关产品推荐

