从Python目录中的多个CSV文件中拉出特定列

2024-04-19 20:44:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个包含不同列的目录中有大约200个CSV文件,但有些文件有我想要提取的数据。我想拉的一列名为“Program”(行的顺序不同,但名称相同),另一列包含“Wild Recommension”(并非所有列的措词都相同,但它们都包含该措词)。最后,我想为每个CSV提取这些列下的所有行,并将它们附加到仅包含这两列的数据框中。我试着先用一个CSV来做这个,但无法让它工作。以下是我的尝试:

import pandas as pd
from io import StringIO

df =  pd.read_csv("test.csv")

dfout = pd.DataFrame(columns=['Programme', 'Recommends'])

for file in [df]:
    dfn = pd.read_csv(file)
    matching = [s for s in dfn.columns if "would recommend" in s]
    if matching:
        dfn = dfn.rename(columns={matching[0]:'Recommends'})
        dfout = pd.concat([dfout, dfn], join="inner")

print(dfout)

我收到以下错误消息,因此我认为这是一个格式问题(它不喜欢熊猫df?): ValueError(msg.format(_type=type(文件路径或缓冲区))) ValueError:无效的文件路径或缓冲区对象类型:<;类“pandas.core.frame.DataFrame”>

当我尝试这个:

csv1 = StringIO("""Programme,"Overall, I am satisfied with the quality of the programme",I would recommend the company to a friend or colleague,Please comment on any positive aspects of your experience of this programme
Nursing,4,4,IMAGE
Nursing,1,3,very good
Nursing,4,5,I enjoyed studying tis programme""")

csv2 = StringIO("""Programme,I would recommend the company to a friend,The programme was well organised and running smoothly,It is clear how students' feedback on the programme has been acted on
IT,4,2,4
IT,5,5,5
IT,5,4,5""")

dfout = pd.DataFrame(columns=['Programme', 'Recommends'])

for file in [csv1,csv2]:
    dfn = pd.read_csv(file)
    matching = [s for s in dfn.columns if "would recommend" in s]
    if matching:
        dfn = dfn.rename(columns={matching[0]:'Recommends'})
        dfout = pd.concat([dfout, dfn], join="inner")

print(dfout)

这很好,但我需要读取CSV文件。有什么想法吗

上述示例的预期输出: enter image description here


Tags: columns文件csvtheinforfilepd
1条回答
网友
1楼 · 发布于 2024-04-19 20:44:27

以下工作:

import pandas as pd
import glob

dfOut = []

for myfile in glob.glob("*.csv"):
    tmp = pd.read_csv(myfile, encoding='latin-1')
    
    matching = [s for s in tmp.columns if "would recommend" in s]
    if len(matching) > 0:
        tmp.rename(columns={matching[0]: 'Recommend'}, inplace=True)
        tmp = tmp[['Subunit', 'Recommend']]
        dfOut.append(tmp)
        
df = pd.concat(dfOut)

相关问题 更多 >