Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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 如何从多个.csv文件中的命名列中选择唯一值?_Python_Pandas_Loops_Csv_Dataframe - Fatal编程技术网

Python 如何从多个.csv文件中的命名列中选择唯一值?

Python 如何从多个.csv文件中的命名列中选择唯一值?,python,pandas,loops,csv,dataframe,Python,Pandas,Loops,Csv,Dataframe,我正在尝试从多个CSV创建唯一ID的列表 我有大约80个包含数据的CSV,它们都是相同格式和相同目录中的数据。这些文件包含来自大约1500个站点的时间序列数据,但并非所有站点都包含在所有文件中。包含我需要的数据的列称为“站点Id”。 通过创建数据帧,我可以从第一个csv中获得唯一的值,但我看不到如何循环遍历所有剩余的文件 如果现在还不清楚的话,我是一个完全的初学者,我的导师正在度假 我已经尝试为一个文件创建df,但我不知道下一步该怎么做 df = pd.read_csv(r'C:filepath

我正在尝试从多个CSV创建唯一ID的列表

我有大约80个包含数据的CSV,它们都是相同格式和相同目录中的数据。这些文件包含来自大约1500个站点的时间序列数据,但并非所有站点都包含在所有文件中。包含我需要的数据的列称为“站点Id”。 通过创建数据帧,我可以从第一个csv中获得唯一的值,但我看不到如何循环遍历所有剩余的文件

如果现在还不清楚的话,我是一个完全的初学者,我的导师正在度假

我已经尝试为一个文件创建df,但我不知道下一步该怎么做

df = pd.read_csv(r'C:filepathhere.csv')
ids = df['Site Id'].unique().tolist()

您可以这样做,迭代所有CSV并将其加载到数据帧中:

from os import walk, path
import pandas as pd

path = 'Path to CSV dir'

csv_paths = []
for root, dirs, files in walk(path):
    for c in glob(path.join(root, '*.csv')):
        csv_paths.append(c)


for file_path in csv_paths:
    df = pd.read_csv(filepath_or_buffer=file_path)
    # do something with df (append, export, etc.) 

你可以这样做。我使用函数获取所有文件,然后将遇到的站点ID合并到我的站点ID列表中。最后,将一个列表转换为一个集合,然后再返回到一个列表中,将删除所有重复的条目

siteIDs = []
directoryToCSVs = r'c:\...'

for filename in os.listdir(directoryToCSVs):
    if filename.lower().endswith('.csv'):
         df = pd.read_csv(r'C:filepathhere.csv')
         siteIDs.extend( df['Site Id'].tolist() )

#remove duplicate site IDs
siteIDs = list(set(siteIds))


#siteIDs will now contain a list of the unique site IDs across all of your CSV files.

首先,您需要将文件收集到一个列表中,以便从中获取数据。有很多方法可以做到这一点,假设您知道它们都在的目录

从操作系统导入漫游 f=[] 对于walkmypath中的目录路径、目录名和文件名: f、 延伸透镜 打破 然后,在该列表中,您需要收集所需的唯一值。不使用Pandas,因为您似乎并不需要数据框中的信息:

导入csv 唯一_数据={} 对于f中的文件: 使用openfile,“rU”作为内嵌: reader=csv.dictReader文件 对于读取器中的行: 仔细检查每一项,为字典增添价值 对于标题,行中的值。项: 唯一_数据[值]=0 如果您想要一个真实的列表,unqiue_data.keys现在是唯一值的列表 唯一的\u数据\u列表=listunqiue\u data.keys
您需要的最终格式是什么?名单?谢谢你的询问。我认为一份清单是最好的选择。我计划使用该列表作为按站点划分每个CSV的基础,因此,如果您不需要在之前或之后使用它,我将使用1500个单独站点的所有数据文件,而不是所有站点的80个月数据文件。明白了,我提出了一个避免使用熊猫的答案,熊猫是一个更重的包。如果你仍在使用它,请查看与你尝试的方法类似的其他方法。