【问题标题】:For Loop to parse through csv files in a directory with the same header and after each looped file print new columnsFor Loop 解析具有相同标题的目录中的 csv 文件,并在每个循环文件​​之后打印新列
【发布时间】:2020-06-18 12:02:30
【问题描述】:

For循环解析具有相同标题的目录中的csv文件,并在每个循环文件​​后打印新列

从下面的代码可以看出,它垂直组合了一个目录中的所有文件。我希望它在每个文件之后水平组合以具有多行

import os
import pandas as pd
#RUN THIS AFTER MAKING ALL THE CSV FILEs
dfmaster = pd.DataFrame()
directory = "/content/drive/My Drive/"

for filename in os.listdir(directory):
    fullpath = os.path.join(directory, filename)
    if os.path.isfile(fullpath) and fullpath.endswith(".csv"):
        dfchild = pd.read_csv(fullpath)
        select_cols = ['var1', 'var2']
        #define columns you want to explort
        dfmaster = dfchild[select_cols]
        #####Problem here, After each file print to two new columns I don't know what to input here
    print(dfmaster.reset_index(drop=True))
    dfmaster.to_csv("/content/drive/My Drive/Subsurface_A.csv", index=False)

所以总结:当前的 for 循环垂直组合列。我想学习如何水平地做到这一点,就像这是 excel 一样

而不是包含所有数据的 A B 列。我希望每个文件的 A B 列彼此相邻放置,以便拥有 A B C D E F G 列......

抱歉,我不懂编码术语。如果模组看到这个,请在​​必要时改写。

谢谢!

【问题讨论】:

标签: python python-3.x pandas csv for-loop


【解决方案1】:

您可以在循环之外创建一个空的 df,然后在每个循环中沿列连续连接:

#empty df
finaldf = pd.Dataframe()
for filename in os.listdir(directory):
    fullpath = os.path.join(directory, filename)
    if os.path.isfile(fullpath) and fullpath.endswith(".csv"):
        dfchild = pd.read_csv(fullpath)
        select_cols = ['obs', 'temperature']
        #define columns you want to explort
        dfmaster = dfchild[select_cols]

        #new line
        finaldf = pd.concat([finaldf, dfmaster],axis = 1)


    print(finaldf.reset_index(drop=True))
    finaldf.to_csv("/content/drive/My Drive/Subsurface_A.csv", index=False)

【讨论】:

  • 谢谢! concat 似乎非常有用。我绝对应该拥有我在编码时使用的每个模块的手册,因为目前我对所用模块的工作知识仍然很低。一个非常简单而优雅的修复,保留了我之前开始的代码。
猜你喜欢
  • 1970-01-01
  • 2021-12-06
  • 2020-01-17
  • 2013-04-15
  • 2022-01-23
  • 1970-01-01
  • 2021-06-15
  • 2018-09-29
  • 1970-01-01
相关资源
最近更新 更多