【问题标题】:Write pandas row `i` and first row to csv将熊猫行`i`和第一行写入csv
【发布时间】:2017-08-08 09:30:35
【问题描述】:

设置

我有一个 pandas 数据框 df 包含几行和几列。

每一行类似于申请人Pn,每一列申请人回答An 对问题Qn。例如

       | Q1 | Q2 | Q3 |
       ----------------
   P1  | A1 | A2 | A3 |
   P2  | A1 | A2 | A3 |
   P3  | A1 | A2 | A3 |

我在 for 循环中获得每个申请人的答案,遍历每一行的列,

number_of_applications = len(df)
for i in range(0,number_of_applications):
    var1 = df['var1'][i]
    var2 = df['var2'][i]
    var3 = df['var3'][i]

这很好用。


问题

我想将申请人的答案和相应的列名写入 csv 文件。所以,对于我想写的每个申请人,

     | Q1 | Q2 | Q3 |
     ----------------
     | A1 | A2 | A3 |

到申请人特定的 csv 文件。

我想在循环中执行此操作。


当前代码

number_of_applications = len(df)
for i in range(0,number_of_applications):
    path = 'mypath'
    os.chdir(path) 
    df.iloc[i].to_csv('name.csv',encoding='utf-8', index=False)

生成的 csv 文件看起来像,

A1
A2
A3

所以只有答案,垂直,没有列名。

如何获得,

  | Q1 | Q2 | Q3 |
  ----------------
  | A1 | A2 | A3 |

【问题讨论】:

    标签: python pandas csv


    【解决方案1】:

    试试这个:

    path = '/path/to/output/files/{}.csv'
    
    df.groupby(level=0) \
      .apply(lambda x: x.to_csv(path.format(x.name), index=False))
    

    上面的代码将为每个申请人生成一个 CSV 文件(索引值)。文件将这样命名:

    P1.csv
    P2.csv
    P3.csv
    ...
    

    其中P1P2P3 - 申请人姓名(索引值)

    【讨论】:

    • 感谢您的回复。这是否允许我遍历申请人?我需要每个申请人的 csv。
    • 这将为每个申请人生成一个 CSV 文件:P1.csvP2.csvP3.csv 用于您的示例 DF
    • @MaxU 我可以想到一些其他的方法来解决这个问题,但你基本上是在一行中管理它。 +1
    猜你喜欢
    • 2023-03-13
    • 2018-12-20
    • 2018-11-11
    • 2020-05-07
    • 2014-03-28
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    相关资源
    最近更新 更多