将一个数据帧转换为多个dfs,并将它们作为CSV添加到zip归档中(不在本地保存文件)



我从本地保存的CSV文件中读取了一个数据帧。然后我想循环遍历所述文件,并基于一列中的字符串创建几个CSV文件。

最后,我想将所有这些文件添加到一个zip文件中,但不将它们保存在本地。我只想要一个zip档案,包括所有不同的CSV文件。

我使用iozipfile模块的所有尝试都只产生了一个zip文件,其中有一个CSV文件(与我开始使用的文件非常相似(

任何帮助都将不胜感激!这是我到目前为止的代码,它可以工作,但只将所有CSV文件保存到我的硬盘上。

import pandas as pd
from zipfile import ZipFile
df = pd.read_csv("myCSV.csv")
channelsList = df["Turn one column to list"].values.tolist()
channelsList = list(set(channelsList)) #delete duplicates from list
for channel in channelsList:
newDf = df.loc[df['Something to match'] == channel]

newDf.to_csv(f"{channel}.csv") # saves csv files to disk

DataFrame.to_csv()可以写入任何类似对象的文件,而ZipFile.writestr()可以接受字符串(或字节(,因此可以避免使用io.StringIO将CSV文件写入磁盘。请参阅下面的示例代码。

注意:如果channel只是存储在输入数据的一列中,那么迭代数据分区的更惯用(更高效(的方法是使用groupby()

from io import StringIO
from zipfile import ZipFile
import numpy as np
import pandas as pd
# Example data
df = pd.DataFrame(np.random.random((100,3)), columns=[*'xyz'])
df['channel'] = np.random.randint(5, size=len(df))
with ZipFile('/tmp/output.zip', 'w') as zf:
for channel, channel_df in df.groupby('channel'):
s = StringIO()
channel_df.to_csv(s, index=False, header=True)
zf.writestr(f"{channel}.csv", s.getvalue())

相关内容

  • 没有找到相关文章

最新更新