如何使用Python解析特定复杂CSV数据并格式化输出?
我来帮你梳理下怎么把这个特殊结构的CSV转换成你想要的格式,用Python来实现的话很直观,咱们一步一步来:
第一步:先理清CSV的特殊结构
先拆解你的CSV内容:
- 前5行是元数据行:每行第一个字段是键(比如
id、company),后面两个字段是重复的对应值 - 第6行是指标定义行:第一个字段是
indicator,后面两个是要跟踪的指标名称(Share Price、Common Shares Outstanding) - 从第7行开始是时间序列数据:每行第一个字段是日期,后面两个是对应指标的数值
第二步:用Python代码实现转换
我们可以用内置的csv模块读取数据,再按逻辑整理成目标格式:
import csv # 替换成你的CSV文件路径 with open('your_data.csv', 'r') as f: reader = csv.reader(f) rows = list(reader) # 1. 提取元数据,生成开头的键值对字符串 metadata = {} for row in rows[:5]: key = row[0].strip() # 取第一个非空值(因为后面两个值完全重复) value = row[1].strip() metadata[key] = value # 拼接成你要的开头格式,若需截断长键名可取消下面注释 header_str = ' '.join([f"{k}:{v}" for k, v in metadata.items()]) # 截断长键名示例:比如把超过15个字符的键名末尾加省略号 # header_str = ' '.join([f"{k[:15]}...:{v}" if len(k)>15 else f"{k}:{v}" for k, v in metadata.items()]) # 2. 提取指标名称 indicators = [col.strip() for col in rows[5][1:]] # 3. 处理时间序列数据,整理成对应记录 data_records = [] for row in rows[6:]: date = row[0].strip() values = [val.strip() for val in row[1:]] record = f"Date:{date} {' '.join([f'{indicators[i]}:{values[i]}' for i in range(len(indicators))])}" data_records.append(record) # 4. 合并输出结果 full_output = header_str + '\n' + '\n'.join(data_records) print(full_output)
第三步:输出效果示例
运行代码后会得到类似这样的结果(如果启用了长键名截断,会和你给出的示例更接近):
id:247341 company:1 800 FLOWERS COM INC ticker:FLWS financial year end (month):6 industry code:103002 Date:2011-11-04 Share Price:2.72 Common Shares Outstanding:65046.232 Date:2012-02-06 Share Price:2.89 Common Shares Outstanding:65065.558 Date:2012-05-04 Share Price:3.04 Common Shares Outstanding:64788.687
如果不用代码,用Excel手动处理也可以:
- 把前5行转置成列,用
&函数拼接成键:值的格式 - 再把日期和指标数据对应起来拼接成每行的记录
不过代码方式更适合批量处理这类特殊结构的数据~
内容的提问来源于stack exchange,提问作者Rakibul bashar
相关产品推荐
相关产品推荐

