从多个CSV中提取一列并保存到新CSV

zengzsys  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(210)

我想从100多个CSV文件中读取特定列以创建新的CSV文件。源列的标题将被重命名为该列的提取文件名。
我可以获得各个列,但如果不使用.“csv”扩展名,则无法重命名每个列的标题:

import os
import pandas as pd

folder = "C:/Users/Doc/Data"
files = os.scandir(folder)

E2080 = []
with os.scandir(folder) as files:
    for file in files:
        #print(file)
        df = pd.read_csv(file, index_col=None)
        dist = {file: (df['lnt_dist'])}
        E = pd.DataFrame(dist)
        E2080.append(E)

dist = pd.concat(E2080, ignore_index=False, axis=1)
dist.head()
dist.to_csv('E2080', index=False)
eivnm1vs

eivnm1vs1#

这是最后一段对我有用的代码(参见输出1):

E2080 = []
with os.scandir(folder) as files:
    for file in files:
        #print(file)
        df = pd.read_csv(file, index_col=None)
        dist = {file: (df['lnt_dist'])}
        E = pd.DataFrame(dist)
        E_1 = E.rename(columns={file: file.name.split('.')[0]}) # rename df header while dropping the ext **[.csv]** and the `os.scandir` attribute `<DirEntry>`
        E2080.append(E_1)

dist = pd.concat(E_28, ignore_index=False, axis=1)
#dist.head()
dist.to_csv('E2080.csv', index=False)
t9aqgxwy

t9aqgxwy2#

您应该使用file.name而不是file来取得名称为的string
而对于string,您可以使用.split(".")来获取不带扩展名的名称。

for file in os.scandir(folder):
    print(file.name, '=>', file.name.split(".")[0])

或者您可以使用pathlib.Path而不是os.scandir()来拥有更多的函数。

for file in pathlib.Path('test').iterdir():
    print(file.name, '=>', file.stem)

相关问题