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

如何用Python的Pandas将CSV文件随机打乱后按4:6拆分?

解决Pandas打乱CSV行并按比例拆分的问题

你的代码存在几个关键问题,导致没达到预期效果:

  • 未导入numpy模块,代码里用了np但没写import numpy as np
  • np.random.permutation(df)仅返回打乱后的数组,没有将结果赋值回原DataFrame,所以原数据根本没被打乱
  • 切片df[401:]会漏掉第400行,应该用df[400:]才能拿到剩下的600行

下面是两种可行的解决方案:

方法一:用Pandas内置sample方法打乱(推荐)

这个方法更简洁,直接对DataFrame操作:

import pandas as pd

# 读取原始CSV
df = pd.read_csv('filename.csv')
# 随机打乱所有行,frac=1表示取全部数据;random_state可选,固定后可复现打乱结果
shuffled_df = df.sample(frac=1, random_state=42)

# 按40%/60%拆分数据
split_point = int(len(shuffled_df) * 0.4)
df_40 = shuffled_df[:split_point]
df_60 = shuffled_df[split_point:]

# 保存到新CSV,index=False避免写入默认索引列
df_40.to_csv('filename1.csv', index=False)
df_60.to_csv('filename2.csv', index=False)

方法二:用numpy的permutation重新索引

如果坚持用numpy的方式,需要通过打乱后的索引重新排列DataFrame:

import pandas as pd
import numpy as np

df = pd.read_csv('filename.csv')
# 生成打乱后的索引数组
shuffled_indices = np.random.permutation(len(df))
# 用打乱后的索引重构DataFrame
shuffled_df = df.iloc[shuffled_indices]

# 拆分和保存逻辑同方法一
split_point = int(len(shuffled_df) * 0.4)
shuffled_df[:split_point].to_csv('filename1.csv', index=False)
shuffled_df[split_point:].to_csv('filename2.csv', index=False)

补充说明:

  • index=False是为了避免把Pandas默认的索引列写入CSV,若需要保留索引可去掉该参数
  • random_state参数可以固定随机种子,让每次运行代码的打乱结果一致,方便调试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:20:35