问题描述
我在一个目录中大约有200个CSV文件,其中包含不同的列,但是有些文件中有我要提取的数据。我要拉的一列称为“ Programme”(行的顺序不同,但名称相同),另一列包含“ would荐”(并非所有措辞都相同,但它们都将包含该措辞)。最终,我想为每个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)
我收到以下错误消息,所以我认为这是一个格式问题(它不喜欢pandas df?):
ValueError(msg.format(_type = type(filepath_or_buffer)))
ValueError:无效的文件路径或缓冲区对象类型:
当我尝试这样做时:
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,IMAGE
Nursing,1,3,very good
Nursing,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,2,4
IT,5
IT,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,join="inner")
print(dfout)
这正常工作,但我需要读取CSV文件。有什么想法吗?
以上示例的预期输出:
解决方法
以下作品:
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)