如何用Python将.dat文件中‘编号:值’格式的数据加载至DataFrame(仅保留值)
Python加载
属性编号:值格式的.dat文件到DataFrame(仅保留数值) 嘿,我来帮你搞定这个问题!要把这种属性编号:值格式的.dat文件数据导入Pandas DataFrame,只保留数值部分,其实分几步就能轻松搞定。我给你两种常用方案,你可以根据自己的文件结构来选:
方法一:逐行读取手动处理(灵活适配复杂结构)
如果你的.dat文件里有空行、注释,或者值本身可能包含冒号,这种方法更稳妥:
import pandas as pd # 初始化字典存储数据,键是属性名,值是对应数值列表 data = {} # 打开并读取文件 with open('your_data.dat', 'r', encoding='utf-8') as file: for line in file: # 去掉首尾空格和换行符 cleaned_line = line.strip() # 跳过空行 if not cleaned_line: continue # 只按第一个冒号分割,避免值里的冒号破坏结构 attr_part, value_part = cleaned_line.split(':', 1) # 尝试把值转换成数值类型(优先整数,其次浮点数) try: num_value = float(value_part) if num_value.is_integer(): num_value = int(num_value) except ValueError: # 转换失败就保留原字符串(如果不需要可以设为NaN) num_value = value_part # 把数据存入字典,用属性编号作为列名 col_name = f'attribute_{attr_part}' if col_name not in data: data[col_name] = [] data[col_name].append(num_value) # 把字典转换成DataFrame df = pd.DataFrame(data) print(df)
这段代码的优势:
- 自动跳过空行,避免报错
- 只分割第一个冒号,完美适配值里包含冒号的情况
- 智能转换数值类型,整数、浮点数自动识别,无法转换的内容保留原样(也可以改成设为
NaN)
方法二:用Pandas的read_csv快速读取(适合规整的文件)
如果你的.dat文件每行严格是属性编号:值,没有多余内容,用read_csv会更简洁:
import pandas as pd # 直接读取文件,指定分隔符为冒号,无表头 raw_df = pd.read_csv( 'your_data.dat', sep=':', header=None, names=['attribute_id', 'value'], encoding='utf-8' ) # 把值转换成数值类型,无法转换的保留原内容(或设为NaN) raw_df['value'] = pd.to_numeric(raw_df['value'], errors='ignore') # 如果想把属性编号作为列名,转置即可 final_df = raw_df.set_index('attribute_id').T print(final_df)
小提示:
- 如果文件里有非
属性:值的行(比如注释行),可以先过滤:raw_df = raw_df[raw_df['attribute_id'].str.contains('\d+')](假设属性编号是数字) - 要是想把无法转换的非数值内容设为
NaN,把errors='ignore'改成errors='coerce'就行
内容的提问来源于stack exchange,提问作者Srihari
相关产品推荐
相关产品推荐

