【问题标题】:After creating a list of csv files, how do I merge them?创建 csv 文件列表后,如何合并它们?
【发布时间】:2021-09-23 23:50:45
【问题描述】:

我创建了一个 csv 文件列表并清理了它们。我一直坚持将这些 csv 文件列表合并在一起。每个 csv 文件在清理后具有相同的列标签。它们还有一个额外的列标签。我需要合并同名的列。

这是我的代码示例:

os.listdir(os.getcwd()) 
filelist = glob.glob('*.csv') 

for file in filelist:
    df = pd.read_csv(file)
    #cleaning code section
    print(df.head())
pd.concat(filelist)

我尝试使用 pd.concat(filelist) 因为我虽然它可以用列表做到这一点,但我明白了

TypeError: 无法连接类型为 '' 的对象;只有 Series 和 DataFrame obj 有效

如果是这样,我可以将我的列表变成一个 DataFrame 对象还是可以使用合并或连接之类的东西?

请发送帮助!

【问题讨论】:

  • filelist 是文件路径列表...您必须保留数据帧列表。 dfs = [] 在 for 循环之前,然后 dfs.append(df) 在循环体的末尾。最后,pd.concat(dfs)
  • 感谢您抽出宝贵时间帮助回答我的问题@Henry
  • 大声笑。我还是习惯了评论。我也看不到您对 pd.concat(dfs) 的其余评论。您能重述该信息吗?
  • 链接的副本有一个完整的代码示例,与下面的答案几乎相同。并且还扩展了我在评论中所说的内容。

标签: pandas list csv join merge


【解决方案1】:
os.listdir(os.getcwd()) 
filelist = glob.glob('*.csv') 

dfs = []
for file in filelist:
    file_df = pd.read_csv(file)

    #cleaning code section
    print(file_df.head())

    dfs.append(file_df)

df = pd.concat(dfs, ignore_index=True) # ignore_index to reset index in concatenated df

# One-liner (no cleaning)
df = pd.concat((pd.read.csv(file) for file in glob.glob('/*.csv')), ignore_index = True)

【讨论】:

  • 我在循环之前执行 dfs =[] 并附加文件,但是当我尝试合并时,我只使用了 pd.concat(dfs)。为什么添加 ignore_index = True 很重要。顺便说一句,它完全有效。我现在只想知道我做错了什么?
  • 也感谢您的帮助!对此,我真的非常感激! ^_^
  • 等待(掌心面对)我没有为 pd.concat(列表)设置变量。 -_- 我得到了它。谢谢你指引我正确的方向。
  • @MelissaBowman 是的,您没有将读取的 csv 文件保存到数据帧中。很高兴我能提供帮助,如果您接受答案将不胜感激:-)
  • 再次感谢!我刚刚想通了如何接受你的回答。 ^_^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多