如何使用 headers 洗牌和拆分大型 csv?
How to shuffle and split a large csv with headers?
我试图找到一种方法来打乱 Python 中大型 csv 文件的行,然后将其拆分为多个 csv 文件(为每个文件分配多个行),但我做不到设法找到一种方法来洗牌大型数据集,并在每个 csv 中保留 headers。
如果有人知道如何做,将会有很大帮助
这是我发现对拆分 csv 文件有用的代码:
number_of_rows = 100
def write_splitted_csvs(part, lines):
with open('mycsvhere.csv'+ str(part) +'.csv', 'w') as f_out:
f_out.write(header)
f_out.writelines(lines)
with open("mycsvhere.csv", "r") as f:
count = 0
header = f.readline()
lines = []
for line in f:
count += 1
lines.append(line)
if count % number_of_rows == 0:
write_splitted_csvs(count // number_of_rows, lines)
lines = []
if len(lines) > 0:
write_splitted_csvs((count // number_of_rows) + 1, lines)
如果有人知道如何打乱所有这些拆分的 csv,这将大有帮助!
非常感谢
如果可能,我建议使用 Pandas。
正在打乱行,就地重置索引:
import pandas as pd
df = pd.read_csv('mycsvhere.csv'+ str(part) +'.csv')
df.sample(frac=1).reset_index(drop=True)
然后可以把多个dataframes拆分成一个列表:
number_of_rows = 100
sub_dfs = [df[i:i + number_of_rows] for i in range(0, df.shape[0], number_of_rows)]
那么如果你想在本地保存 csvs:
for idx, sub_df in enumerate(sub_dfs):
sub_df.to_csv(f'csv_{idx}.csv', index=False)
这里有3个需求:
- 打乱你的数据集
- 拆分数据集
- 正在格式化
对于前两个步骤,Sklearn 中有一些不错的工具。您可以尝试分层洗牌分离器。
Sklearn SSS
您没有提到分层部分,但您可能在不知不觉中需要它 ;)
最后一部分,格式化,全靠你了。您可以检查 pandas to_csv() 函数,您可以在其中指定 headers,您也可以(需要)在数据 object 中指定 headers (DataFrame ).这里没什么难的,只需花一点时间指定你想要的,然后轻松实现它:)
旁注:您可以删除 pandas,这取决于 'big' 适合您,pandas 在大数据上不是 'good'。
我试图找到一种方法来打乱 Python 中大型 csv 文件的行,然后将其拆分为多个 csv 文件(为每个文件分配多个行),但我做不到设法找到一种方法来洗牌大型数据集,并在每个 csv 中保留 headers。 如果有人知道如何做,将会有很大帮助
这是我发现对拆分 csv 文件有用的代码:
number_of_rows = 100
def write_splitted_csvs(part, lines):
with open('mycsvhere.csv'+ str(part) +'.csv', 'w') as f_out:
f_out.write(header)
f_out.writelines(lines)
with open("mycsvhere.csv", "r") as f:
count = 0
header = f.readline()
lines = []
for line in f:
count += 1
lines.append(line)
if count % number_of_rows == 0:
write_splitted_csvs(count // number_of_rows, lines)
lines = []
if len(lines) > 0:
write_splitted_csvs((count // number_of_rows) + 1, lines)
如果有人知道如何打乱所有这些拆分的 csv,这将大有帮助! 非常感谢
如果可能,我建议使用 Pandas。
正在打乱行,就地重置索引:
import pandas as pd
df = pd.read_csv('mycsvhere.csv'+ str(part) +'.csv')
df.sample(frac=1).reset_index(drop=True)
然后可以把多个dataframes拆分成一个列表:
number_of_rows = 100
sub_dfs = [df[i:i + number_of_rows] for i in range(0, df.shape[0], number_of_rows)]
那么如果你想在本地保存 csvs:
for idx, sub_df in enumerate(sub_dfs):
sub_df.to_csv(f'csv_{idx}.csv', index=False)
这里有3个需求:
- 打乱你的数据集
- 拆分数据集
- 正在格式化
对于前两个步骤,Sklearn 中有一些不错的工具。您可以尝试分层洗牌分离器。 Sklearn SSS 您没有提到分层部分,但您可能在不知不觉中需要它 ;)
最后一部分,格式化,全靠你了。您可以检查 pandas to_csv() 函数,您可以在其中指定 headers,您也可以(需要)在数据 object 中指定 headers (DataFrame ).这里没什么难的,只需花一点时间指定你想要的,然后轻松实现它:)
旁注:您可以删除 pandas,这取决于 'big' 适合您,pandas 在大数据上不是 'good'。