Pandas:如何将单行逗号分隔的CSV内容读取为单列多行数据框?
问题根源
你之前的读取逻辑没有关闭Pandas默认的表头识别规则:Pandas默认将CSV第一行作为列名读取,也就是把你那80个连续存放的年份全部当成了列名;遇到重复值时Pandas会自动给列名追加.1、.2后缀做去重,后续转置操作拿到的就是这些被改过的字符串值,而非原始年份数值。
正确实现代码
读取时指定header=None,明确告知Pandas文件没有表头,所有内容都作为普通数据处理:
import pandas as pd # 核心参数:header=None 跳过表头识别,整行80个值全部作为数据读取 raw_df = pd.read_csv('tos_year.csv', header=None) # raw_df 结构为1行80列,直接转置即可得到80行1列的目标结构 tos_year = raw_df.T tos_year.columns = ['Year'] # 可选:将默认读入的浮点型年份转为整数 tos_year['Year'] = tos_year['Year'].astype(int)
精简版一步到位代码
不需要保留中间变量的话,可以直接通过stack操作把二维数据压成单列:
tos_year = pd.read_csv('tos_year.csv', header=None).stack().to_frame(name='Year')
后续拼接说明
生成的tos_year索引是0到79的连续整数序列,和常规读取生成的主数据框索引完全匹配,后续直接执行pd.concat([主数据框, tos_year], axis=1)即可完成横向拼接,不会出现索引错位产生的空值。
内容的提问来源于stack exchange,提问作者Birko
相关产品推荐
相关产品推荐

