Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用导入数据样本的文件名命名pandas DataFrame中的标记数据样本?_Python_Excel_Pandas_Dataframe - Fatal编程技术网

Python 如何使用导入数据样本的文件名命名pandas DataFrame中的标记数据样本?

Python 如何使用导入数据样本的文件名命名pandas DataFrame中的标记数据样本?,python,excel,pandas,dataframe,Python,Excel,Pandas,Dataframe,我正在从事一个项目,在该项目中,我将许多不同的CSV文件或工作表(我称之为工作表)导入到一个数据框中。工作表包含数百个不同人员的信息,我正在按其中一列(人员来自哪个县)组织数据框,然后将来自县A的人员的所有数据导出到新的CSV文件,与来自县B的人员相同,等等。。。我已经成功地完成了所有这些,但是我现在的问题是,我想在每个新文件中创建一个新列,其中包含所有数据样本(人员)来自的原始工作表的名称。例如,如果我已将A县的所有人员(所有原始工作表中的所有人员)导出到名为CountyA.csv的新文件中,

我正在从事一个项目,在该项目中,我将许多不同的CSV文件或工作表(我称之为工作表)导入到一个数据框中。工作表包含数百个不同人员的信息,我正在按其中一列(人员来自哪个县)组织数据框,然后将来自县A的人员的所有数据导出到新的CSV文件,与来自县B的人员相同,等等。。。我已经成功地完成了所有这些,但是我现在的问题是,我想在每个新文件中创建一个新列,其中包含所有数据样本(人员)来自的原始工作表的名称。例如,如果我已将A县的所有人员(所有原始工作表中的所有人员)导出到名为CountyA.csv的新文件中,我如何添加一个新列,给出每个人最初来自的工作表的名称

这就是我到目前为止所做的:

import pandas as pd
import glob
import os

files_path = '/Users/Desktop/Data/worksheets'
files = glob.glob(files_path + '/*.csv')

df = pd.concat((pd.read_csv(file) for file in files), ignore_index=True)

data = []
for file in files:
    CountyA = df.loc[df['County'] == 'County A']
    CountyA['Worksheet'] = os.path.basename(files)
    data.append(CountyA)
    pd.DataFrame(CountyA).to_csv('CountyA.csv')
    print(pd.DataFrame(CountyA))
当我运行此程序时,它成功地将所有工作表编译成一个数据框,搜索数据框并按县进行组织,将县A中人员的所有数据导出到名为CountyA.csv的新文件中,并在名为“工作表”的新文件中创建一个新列,在这个新列中,它实际上并没有说明每个数据点来自哪个工作表。它只是创建多个不同的新文件,在每个文件中,它只是用一个工作表的名称填充新列中的每个点,而不是显示每个数据点来自哪个工作表。我希望有人能帮助我


顺便说一句,我对编码非常陌生,这是我关于堆栈溢出的第一篇文章,所以如果有任何其他信息对我有帮助,请让我知道,我会尽我所能提供它!提前感谢。

根据您的描述,您的代码需要如下所示:

import pandas as pd
import glob
import os

files_path = '/Users/Desktop/Data/worksheets'
files = glob.glob(files_path + '/*.csv')
ls_temp_dfs = []
for file in files:
  temp_df =  pd.read_csv(file)
  temp_df['WorkSheet'] = os.path.basename(file)
  ls_temp_dfs.append(temp_df)
df_combined = pd.concat(ls_temp_dfs, ignore_index = True)
CountyA = df_combined.loc[df_combined['County'] == 'County A']
CountryA.to_csv('CountyA.csv')
这将确保文件名作为列添加到每个数据点。然后,如果要导出,则不需要在文件上循环。您可以简单地执行以下操作:

import pandas as pd
import glob
import os

files_path = '/Users/Desktop/Data/worksheets'
files = glob.glob(files_path + '/*.csv')
ls_temp_dfs = []
for file in files:
  temp_df =  pd.read_csv(file)
  temp_df['WorkSheet'] = os.path.basename(file)
  ls_temp_dfs.append(temp_df)
df_combined = pd.concat(ls_temp_dfs, ignore_index = True)
CountyA = df_combined.loc[df_combined['County'] == 'County A']
CountryA.to_csv('CountyA.csv')

根据您的描述,您的代码需要如下所示:

import pandas as pd
import glob
import os

files_path = '/Users/Desktop/Data/worksheets'
files = glob.glob(files_path + '/*.csv')
ls_temp_dfs = []
for file in files:
  temp_df =  pd.read_csv(file)
  temp_df['WorkSheet'] = os.path.basename(file)
  ls_temp_dfs.append(temp_df)
df_combined = pd.concat(ls_temp_dfs, ignore_index = True)
CountyA = df_combined.loc[df_combined['County'] == 'County A']
CountryA.to_csv('CountyA.csv')
这将确保文件名作为列添加到每个数据点。然后,如果要导出,则不需要在文件上循环。您可以简单地执行以下操作:

import pandas as pd
import glob
import os

files_path = '/Users/Desktop/Data/worksheets'
files = glob.glob(files_path + '/*.csv')
ls_temp_dfs = []
for file in files:
  temp_df =  pd.read_csv(file)
  temp_df['WorkSheet'] = os.path.basename(file)
  ls_temp_dfs.append(temp_df)
df_combined = pd.concat(ls_temp_dfs, ignore_index = True)
CountyA = df_combined.loc[df_combined['County'] == 'County A']
CountryA.to_csv('CountyA.csv')

这太完美了!“我无法向你表达我的谢意,哈哈,我花了整整两天的时间试图解决这个问题。”@valenwood0512我很高兴。如果这回答了你的问题,请点击复选标记接受答案好吗?这太完美了!“我无法向你表达我的谢意,哈哈,我花了整整两天的时间试图解决这个问题。”@valenwood0512我很高兴。如果回答了您的问题,请单击复选标记接受答案?