首页 > 解决方案 > 循环遍历数据框并根据列中的值导出不同的 csv

问题描述

我想遍历这个数据框并根据唯一字符串(BMP_ASR1 和 WATSYRIN)的 parm 列组导出不同的 csv,并从该字符串组(BMP_ASR1 和 WATSYRIN)中命名 csv。

     name      post_mean    post_stdev  post_lower_bound    post_upper_bound    Year    parm
0   BMP_ASR1    16.50       21.46260    -26.42530        59.4253                2020    BMP_ASR1
1   BMP_ASR1    36.60       53.48860    -70.37730        143.5770               2030    BMP_ASR1
2   WATSYRIN    10390.20    279.44300   9831.31000       10949.1000             2070    WATSYRIN
3   WATSYRIN    11164.90    293.37900   10578.10000      11751.7000             2080    WATSYRIN
4   WATSYRIN    33630.70    902.58200   31825.50000      35435.8000             2090    WATSYRI

输出将包括所有列,但与 parm 行中的值相同。

BMP_ASR1.csv =

         name      post_mean    post_stdev  post_lower_bound    post_upper_bound    Year    parm
    0   BMP_ASR1    16.50       21.46260    -26.42530        59.4253                2020    BMP_ASR1
    1   BMP_ASR1    36.60       53.48860    -70.37730        143.5770               2030    BMP_ASR1

    WATSYRIN.csv =
    
WATSYRIN
    3   WATSYRIN    11164.90    293.37900   10578.10000      11751.7000             2080    WATSYRIN
    4   WATSYRIN    33630.70    902.58200   31825.50000      35435.8000             2090    WATSYRI

标签: pythondataframeloopsgroup-byexport-to-csv

解决方案


用户 groupby 并循环遍历每个 groupby 对象

lst = ['BMP_ASR1', 'WATSYRIN'] # list of parms to keep
for k,v in df.groupby('parm'): # for key, value in the groupby object
    if k in lst: # if the key is in the list
        v.to_csv(f'{k}.csv', index=False) # write to csv file

或先过滤并避免使用 if 语句

lst = ['BMP_ASR1', 'WATSYRIN'] # list of parms to keep
filter_df = df[df['parm'].isin(lst)] # boolean indexing to keep certain parms
for k,v in filter_df.groupby('parm'): # for key, value in the groupby object
    v.to_csv(f'{k}.csv', index=False) # value to csv

如果要保留 parm 列中的所有唯一组,则

for k,v in df.groupby('parm'):
        v.to_csv(f'{k}.csv', index=False)

推荐阅读