You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python导入含空行分隔数据的CSV时,如何动态拆分列?

处理含空行分隔组的单列CSV数据

我有一个仅含一列整数值的CSV文件,里面用空行分隔不同学生的科目成绩(每个空行区间对应一个学生的所有成绩),但每个学生的成绩行数各不相同。数据示例如下:

63
67
86
90

45
69
90

78
85
40
93
53
55
67

38
92
75
94
73

...

用pd.read_csv('input_data.txt', header=None)导入时,pandas会自动忽略空行,把所有成绩合并成一列,没法区分不同学生的成绩组,输出结果类似:

0
0   63
1   67
2   86
3   90
4   45
5   69
6   90
7   78
...

解决方法

方法1:手动读取文件分组

直接读取文件内容,按空行分割成不同学生的成绩块,再转成DataFrame:

import pandas as pd

# 读取文件内容,按空行分割每个学生的成绩块
with open('input_data.txt', 'r') as f:
    content = f.read().split('\n\n')

# 处理每个块,过滤空内容并转成整数列表
student_scores = []
for block in content:
    scores = [int(num) for num in block.strip().split('\n') if num.strip()]
    if scores:  # 跳过空块
        student_scores.append(scores)

# 转成DataFrame,每行对应一个学生的成绩列表
df = pd.DataFrame({'student_scores': student_scores})

输出示例:

student_scores
0           [63, 67, 86, 90]
1               [45, 69, 90]
2  [78, 85, 40, 93, 53, 55, 67]
3        [38, 92, 75, 94, 73]

如果想把每个成绩拆成单独列(用NaN补全对齐):

# 找到最长的成绩列表长度
max_len = max(len(scores) for scores in student_scores)
# 补NaN对齐所有学生的成绩
aligned_scores = [scores + [pd.NA]*(max_len - len(scores)) for scores in student_scores]
# 转成带列名的DataFrame
df = pd.DataFrame(aligned_scores, columns=[f'score_{i+1}' for i in range(max_len)])

输出示例:

score_1  score_2  score_3  score_4  score_5  score_6  score_7
0       63       67       86       90     <NA>     <NA>     <NA>
1       45       69       90     <NA>     <NA>     <NA>     <NA>
2       78       85       40       93       53       55       67
3       38       92       75       94       73     <NA>     <NA>

方法2:用pandas内置功能分组

先读取所有行(包括空行),再通过空行标记分组:

import pandas as pd

# 读取所有行,空行显示为空字符串(keep_default_na=False)
df_raw = pd.read_csv('input_data.txt', header=None, keep_default_na=False)

# 创建分组ID:每遇到一个空行,分组ID加1
group_id = (df_raw[0] == '').cumsum()

# 分组聚合成绩,过滤掉空行对应的组
df = df_raw[df_raw[0] != ''].groupby(group_id).agg(list).reset_index(drop=True)
df.columns = ['student_scores']

这个方法全程用pandas操作,效果和方法1一致。

内容的提问来源于stack exchange,提问作者pallab bhattacharya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:55:16