Python 使用哈希键动态地按列(标题)读取 csv

Posted

技术标签:

【中文标题】Python 使用哈希键动态地按列(标题)读取 csv【英文标题】:Python read csv by column (header) dynamically with hash key 【发布时间】:2022-01-22 22:37:33 【问题描述】:

我尝试如下垂直读取一个 csv 文件,以使用 python 插入到石墨/碳时间序列数据库中。

"No.","time","00:00:00","00:00:01","00:00:02","00:00:03","00:00:04","00:00:05","00:00:06","00:00:07","00:00:08","00:00:09","00:00:0A"
"1","2021/09/12 02:16",235,610,345,997,446,130,129,94,555,274,4
"2","2021/09/12 02:17",364,210,371,341,294,87,179,106,425,262,3
"3","2021/09/12 02:18",297,343,860,216,275,81,73,113,566,274,3
"4","2021/09/12 02:19",305,243,448,262,387,64,63,119,633,249,3
"5","2021/09/12 02:20",276,151,164,263,315,86,92,175,591,291,1
"6","2021/09/12 02:21",264,343,287,542,312,83,72,122,630,273,4
"7","2021/09/12 02:22",373,157,266,446,246,90,173,90,442,273,2
"8","2021/09/12 02:23",265,112,241,307,329,64,71,82,515,260,3
"9","2021/09/12 02:24",285,247,240,372,176,92,67,83,609,620,1
"10","2021/09/12 02:25",289,964,277,476,356,84,74,104,560,294,1
"11","2021/09/12 02:26",279,747,227,573,569,82,77,99,589,229,5
"12","2021/09/12 02:27",338,370,315,439,653,85,165,346,367,281,2
"13","2021/09/12 02:28",269,135,372,262,307,73,86,93,512,283,4
"14","2021/09/12 02:29",281,207,688,322,233,75,69,85,663,276,2

我希望建立一个字典“元组”内容如下: 事实上,我需要在每列的标题中写入每次的值,并将日期转换为纪元时间:

“2021/09/12 02:16”= 纪元 1631405760

 tuples.append(('perf.type.serial.object.00:00:00.TOTAL_IOPS', (1631405760 ,235)))
 tuples.append(('perf.type.serial.object.00:00:00.TOTAL_IOPS', (1631405820 ,364)))
...
 tuples.append(('perf.type.serial.object.00:00:01.TOTAL_IOPS', (1631405760 ,610)))
 tuples.append(('perf.type.serial.object.00:00:01.TOTAL_IOPS', (1631405820 ,210)))

我可以列出标题,但我不知道如何保留每个标题的日期和值

    import csv
    
        def read_csv(file_path):
           with open(file_path, 'rt') as f:
               csv_reader = csv.reader(f, delimiter=',')
        
               for line in csv_reader:
                   print(line)                  
           tuples.append(('perf.type.serial.object.header.col.TOTAL_IOPS', (1631405760 ,235))) ?


read_csv('my.csv')

非常感谢您的帮助

【问题讨论】:

pandas 数据框非常适合这里。您可以将 csv 读取为数据框,然后迭代您需要的列。如果您需要更多信息,请告诉我们。谢谢 是的,我看到熊猫库可以执行这种读取,但我从不使用熊猫... 请将我的回复视为答案,如果您希望我添加更多信息,请告诉我! 非常感谢 simpleApp!这正是我需要的。 最后,我得到了这些值:('perf.type.serial.object.epoch.TOTAL_IOPS', (1639472400, 1639472400)) ? 【参考方案1】:
    读取 csv 文件。
import pandas as pd
df=pd.read_csv("raw_data.csv") # read the csv
    添加新列值,请根据您的时代逻辑进行调整。
import time, os
date_pattern='%Y/%m/%d %H:%M'
df['epoch'] = df.apply(lambda row: int(time.mktime(time.strptime(row.time,date_pattern))), axis=1) # create epoch as a column
df
    根据需要将数据保存在列表或任何 ds 中。
tuples_saved=[] # data will be saved in a list
formated_str='perf.type.serial.object.00:00:00.TOTAL_IOPS'
for each_column in list(df.columns)[2:]:
    for e in zip(list(df['epoch']),list(df[each_column])):
        #print(f"perf.type.serial.object.each_column.TOTAL_IOPS",e)
        tuples_saved.append((f"perf.type.serial.object.each_column.TOTAL_IOPS",e))

【讨论】:

【参考方案2】:

试试这个。

with open(file_path, 'r') as f:
        csv_reader = csv.reader(f, delimiter=',')
        dict_from_csv=rows[0]:rows[1] for rows in csv_reader
print(dict_from_csv)

【讨论】:

以上是关于Python 使用哈希键动态地按列(标题)读取 csv的主要内容,如果未能解决你的问题,请参考以下文章

Python - 读取 csv 并按列对数据进行分组

请教一下:python 如何按列读取的?

Python - 读取csv并按列分组数据

以整数为键并映射到 void 指针的 C 映射/哈希表

按列对csv进行排序

使用 Java 读取 C 驱动器上每个文件的元数据和 MD5 哈希