【问题标题】:Combine All CSVs in Folder then Delete First 3 Column using Python合并文件夹中的所有 CSV,然后使用 Python 删除前 3 列
【发布时间】:2021-06-20 11:47:37
【问题描述】:

我正在尝试将多个 CSV 合并到一个文件夹中,然后删除前 3 列。我的代码可以合并文件,但我不能删除列。任何人都可以看到这个问题吗?

import pandas as pd
import glob

path = r'C:\Users\****' # use your path
all_files = glob.glob(path + "/*.csv")

li = []

for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    li.append(df)

frame = pd.concat(li, axis=0, ignore_index=True)

frame.drop(frame.columns[[0, 1, 2]], axis=1)

print(frame)
frame.to_csv('out.csv', index=False)

【问题讨论】:

  • 你不能只 read_csv 没有前 3 列 usecols,使用 pd.read_csv('foo.csv', usecols=[3:])
  • 你需要重新分配它,frame = frame.drop(frame.columns[[0, 1, 2]], axis=1) 是一种方式。

标签: python pandas glob


【解决方案1】:

您可以使用. iloc[:,3] 并选择您想要的列索引:


from pathlib import Path
import pandas as pd

path = Path('C:\Users\****') # use your path
all_files = path.glob("*.csv")

frame = pd.concat(
(pd.read_csv(file_, index_col=None, header=0).iloc[:,3:]
for file_ in all_files), axis=0, ignore_index=True)

frame.to_csv('out.csv', index=False)

【讨论】:

  • 嗯!在 Pandas 上下文中,这意味着所有列减去前 3。列是索引或实际名称的列表
  • 我会找一台电脑。穆斯塔法,我认为你是对的。我阅读了文件,看来这不是列表,因为顺序无关紧要
  • 好的,更改为.iloc[:, 3:] 这将读取所有列,然后选择除前三个之外的所有列。一切都保持不变
猜你喜欢
  • 2020-02-18
  • 2014-01-19
  • 2021-11-10
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 2020-02-11
  • 2022-07-28
  • 2015-06-23
相关资源
最近更新 更多