【发布时间】:2020-08-07 21:06:31
【问题描述】:
我有一个相当大的数据文件,它有 200% 的可用内存,我想重命名列并将其保存到具有不同名称的新文件中。
当我对一个小样本进行重命名时,事情会按预期工作,即
df = pd.read_csv(path, encoding="ISO-8859-1", engine='python', nrows=10)
print_columns(df)
rename_columns(df)
print_columns(df)
df.to_csv(path_to_save)
这可以按预期工作并重命名列,但仅保存大文件的十行采样。
当加载非常大的文件时,Python 中有几个选项:
1) 逐行读取和处理大文件
我上次是在另一个大文件上这样做的,但是在重命名列时我真的需要这样做吗?
2) 在 pandas 中分块:
chunksize = 100000
for chunk in pd.read_csv(path, chunksize=chunksize, encoding="ISO-8859-1", engine='python'):
print_columns(chunk)
rename_columns(chunk)
print_columns(chunk)
显然,我重命名了每个块,但我遇到的一个大问题是如何以正确的顺序将所有块缝合在一起并保存大块?
3) 实际上是否有一个很好的旧 shell 命令可以更轻松地重命名列?
作为背景,我准备将数据导入数据库,但需要保持源文件原样,从而保存为不同的文件名。
【问题讨论】:
-
标题通常只是第一行,如果您只需要编辑单行标题但不更改数据,您总是可以在 Python 之外进行,或者手动进行,甚至是 perl /awk/sed 替换。您需要以编程方式进行吗?
-
如果你想编写所有没有标题的中间块并将它们连接在一起,请使用
df.to_csv(... , header=None, mode='a'),它会执行附加,没有标题。 -
Marvin.Hansen:如果您不需要 Python/pandas 解决方案,请不要在标题中添加“Python/pandas”。另外,不要edit solutions into the question and change the title to 'SOLVED'。