如何在 python 中编写一个函数,将函数输出的目录文件名写入数据框?

How can I write a function in python to write the file names of directory with the output of my function to a dataframe?

我是 python 的新手,正在尝试了解如何使用遍历。

#我的有效代码-

import pandas as pd
import nltk
from nltk.sentiment.vader import SentimentIntensityAnalyzer
df = pd.read_csv("1003285474_1003285465_0a54173ed4c58b7354e0dd48.csv",encoding="utf-8")
s = ' '.join(df['transcript'])

sid = SentimentIntensityAnalyzer()
sid.polarity_scores(s)
Out[68]: {'neg': 0.046, 'neu': 0.707, 'pos': 0.247, 'compound': 0.9922}

正如您在上面看到的,我有 2 个函数,一个连接一列的所有行,另一个 returns 情绪极性得分。我的 objective 是遍历一个文件夹并对该文件夹中的所有 csvs 执行上述操作。 我的最终 objective 是有一个数据框具有以下 -

filename                                             neg    neu    pos     compound
1003285474_1003285465_0a54173ed4c58b7354e0dd48.csv   0.046  0.707  0.247   0.9922
1003285474_1003285465_0a54173ed4c58b7354e0dd41.csv   0.192  0.731  0.122   0.7222

我应该如何遍历所有 csv 文件,将以上内容应用于函数并将以上结果添加到所有这些 csvs 的数据帧中?

首先,创建一个函数来包装您的分析:

def analyse_data(file_path):
    df = pd.read_csv(file_path, encoding='utf-8')
    s = ' '.join(df['transcript'])

    sid = SentimentIntensityAnalyzer()
    score = sid.polarity_scores(s)
    score['filename'] = os.path.basename(file_path)

此函数采用文件路径和 return 最终数据框中的一行。一个示例 return 将是:

{'filename': '1003285474_1003285465_0a54173ed4c58b7354e0dd48.csv', 'neg': 0.046, 'neu': 0.707, 'pos': 0.247, 'compound': 0.9922}

然后,使用os.walk遍历目录中的所有文件并应用该函数。

def create_dataframe(root_dir):
    data = []
    for path, subdirs, files in os.walk(root_dir):
        for file_name in files:
            full_path = os.path.join(path, file_name)
            data.append(analyse_data(full_path))

    return pd.DataFrame(data)

我假设root_dir及其子目录下只有CSV文件,因此在应用分析功能之前不需要检查文件类型。

import os    
from glob import glob
import pandas as pd
import nltk
from nltk.sentiment.vader import SentimentIntensityAnalyzer

# use glob to get a list of csv files in a folder
files = glob('path/to/folder/*.csv')
sid = SentimentIntensityAnalyzer()
# use dict comprehension to apply you analysis
data = {os.path.basename(file): sid.polarity_scores(' '.join(pd.read_csv(file, encoding="utf-8")['transcript'])) for file in files}
# create a data frame from the dictionary above
df = pd.DataFrame.from_dict(data, orient='index')