【问题标题】:How to export a list of df to separate csv files如何将 df 列表导出到单独的 csv 文件
【发布时间】:2020-09-08 06:42:06
【问题描述】:

我正在尝试将 pandas 数据框列表导出到单个 csv 文件。

我现在有这个

import pandas as pd
import numpy as np

data = {"a":[1,2,3,4,5,6,7,8,9], "b":[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]}
df = pd.DataFrame (data, columns = ["a","b"])
df = np.array_split(df, 3)

我试过了:

for i in df:
    i.to_csv((r'df.csv'))

但是,这不会输出所有子 df,只会输出最后一个。

如何让它输出所有 df,输出的 csv 名称为 df1.csv、df2.csv 和 df3.csv?

【问题讨论】:

  • 所有答案都有效。感谢您的帮助:)

标签: python pandas csv dataframe for-loop


【解决方案1】:

您将每个数据帧写入同一个文件'df.csv'。在for 循环中,您可以使用zip() 指定要保存的数据帧和要保存到的文件。

>>> for i, outfile in zip(df, ["df1.csv", "df2.csv", "df3.csv"]):
...     i.to_csv(outfile)

您可以通过多种方式完成此特定任务。这是一个带有enumerate() 的循环,因此您不必编写整个文件名列表。

>>> for j, frame in enumerate(df):
...     frame.to_csv(f"df{j+1}.csv")

【讨论】:

  • OP 没有必要使用原始字符串。但有趣的是,如果 OP 确实需要原始字符串,那么 Python 中确实存在格式化的原始字符串。你可以做 fr"df{j}.csv" 那些小众但超级酷的 Python 功能之一。
【解决方案2】:

它确实输出了所有三个。只是第二个覆盖了第一个,最后一个也是如此。您必须将它们写成三个单独的文件名。

为了实现这一点,我们需要根据我们在循环中的位置来修改字符串。最简单的方法是在循环上设置一个计数器。由于变量“i”通常是为此类计数器保留的,因此我将您的虚拟变量重命名为 _df。不要被它弄糊涂。为了在循环中获得一个计数器,我们使用枚举。

for i, _df in enumerate(df):
    print(i)
    filename = 'df' + str(i) + '.csv'
    _df.to_csv(filename) # I think the extra parenthesis are unecessary?

编辑:请注意,与在列表中指定所有文件名的建议相比,这样做的优势在于您无需提前知道列表的长度。如果您知道长度也很有帮助,但它很大。如果它是 3 并且您知道它是 3 并且不会改变,那么您可以按照其他地方的建议指定文件名。

【讨论】:

    【解决方案3】:

    您可以在索引上使用楼层划分,然后使用 groupby 来创建您的个人框架。

    for data, group in df.groupby(df.index // 3):
        group.to_csv(f"df{data+1}.csv")
    

    【讨论】:

      【解决方案4】:

      每次迭代都会在同一文件中替换数据。

      试试:

      for i, value in enumerate(df):
          value.to_csv('/path/to/folder/df'+str(i)+'.csv')
      

      【讨论】:

        猜你喜欢
        • 2016-05-12
        • 1970-01-01
        • 2017-12-02
        • 2012-01-16
        • 1970-01-01
        • 2014-04-11
        • 2021-09-23
        • 1970-01-01
        • 2019-08-18
        相关资源
        最近更新 更多