如何用Pandas导入含重复表头行的CSV并提取值?
解决每行含重复表头的CSV数据提取问题
你的问题核心是CSV每行都是键: 值的重复表头格式,仅用sep=';'分割只能得到带键名的列内容,需要额外处理提取值部分。以下是两种可行方案:
方案一:字符串分割提取
先按分号读取数据,再对每个列做字符串分割,提取冒号后的内容并清理空格,最后转换数值类型:
import pandas as pd # 读取文件,指定分隔符和列名 df = pd.read_csv('base.txt', sep=';', header=None, names=['player', 'level', 'last_login', 'coins']) # 遍历所有列,提取冒号后的有效内容 for col in df.columns: # 按冒号分割,取最后一部分,再去除前后空格 df[col] = df[col].str.split(':').str[-1].str.strip() # 将数值列转换为整数类型(player列保留字符串) df[['level', 'last_login', 'coins']] = df[['level', 'last_login', 'coins']].astype(int) print(df)
方案二:正则表达式提取
用正则直接匹配冒号后的内容,代码更简洁:
import pandas as pd df = pd.read_csv('base.txt', sep=';', header=None, names=['player', 'level', 'last_login', 'coins']) # 用正则提取冒号后(忽略可能的空格)到行尾的内容 df = df.apply(lambda col: col.str.extract(r':\s*(.*)$')[0]) # 转换数值列类型 df[['level', 'last_login', 'coins']] = df[['level', 'last_login', 'coins']].astype(int) print(df)
运行后都会得到你想要的结果:
player level last_login coins 0 John Doe 45 7854414174 7600 1 Anckx Uj 471 7854418847 684111
内容的提问来源于stack exchange,提问作者kirstendo
相关产品推荐
相关产品推荐

