如何将分隔符数量可变的文本文件转换为dataframe并按需执行explode操作
文本转DataFrame实现方法
你提供的文本是每行列数不固定的逗号分隔数据,无法直接用pd.read_csv默认逻辑读取,可按行拆分后处理:
import pandas as pd # 直接读取文本内容,也可以通过open()读取本地文件行 raw_text = """Attribute1,data1,data2 Attribute2,data1,data2,data3,data4 Attribute3,data1,data2,data3 Attribute4,data1,data2,data3,data4,data5,data6""" # 按行拆分,每行再按逗号切分为列表 row_list = [line.split(',') for line in raw_text.strip().split('\n')] # 若需要得到你示例中|分隔的输出格式,可直接拼接后生成DataFrame df = pd.DataFrame( ['|'.join(row) for row in row_list], columns=['merged_content'] ) # 打印验证输出 print(df.to_string(index=False, header=False))
运行后即可得到你期望的第一阶段输出。
指定范围explode实现方法
explode本身支持仅对指定列操作,你只需要提前把需要展开的data3及之后的数据单独存为列表列,自动就会忽略前两个数据点:
# 构造待explode的DataFrame结构 explode_data = [] for row in row_list: attr_name = row[0] # 索引0为属性名,1为data1、2为data2,所以从索引3开始截取就是data3及之后的数据 need_explode = row[3:] # 过滤掉没有data3及之后数据的行(比如Attribute1) if need_explode: explode_data.append({ 'attribute': attr_name, 'explode_col': need_explode }) df_explode = pd.DataFrame(explode_data) # 仅对explode_col列执行explode操作 result = df_explode.explode('explode_col') # 打印你期望的|分隔格式输出 for _, line in result.iterrows(): print(f"{line['attribute']}|{line['explode_col']}")
运行后即可得到你需要的explode结果。
内容的提问来源于stack exchange,提问作者user17475933
相关产品推荐
相关产品推荐

